使用keras根据层名称来初始化网络


Posted in Python onMay 21, 2020

keras根据层名称来初始化网络

def get_model(input_shape1=[75, 75, 3], input_shape2=[1], weights=None):
 bn_model = 0
 trainable = True
 # kernel_regularizer = regularizers.l2(1e-4)
 kernel_regularizer = None
 activation = 'relu'

 img_input = Input(shape=input_shape1)
 angle_input = Input(shape=input_shape2)

 # Block 1
 x = Conv2D(64, (3, 3), activation=activation, padding='same',
    trainable=trainable, kernel_regularizer=kernel_regularizer,
    name='block1_conv1')(img_input)
 x = Conv2D(64, (3, 3), activation=activation, padding='same',
    trainable=trainable, kernel_regularizer=kernel_regularizer,
    name='block1_conv2')(x)
 x = MaxPooling2D((2, 2), strides=(2, 2), name='block1_pool')(x)

 # Block 2
 x = Conv2D(128, (3, 3), activation=activation, padding='same',
    trainable=trainable, kernel_regularizer=kernel_regularizer,
    name='block2_conv1')(x)
 x = Conv2D(128, (3, 3), activation=activation, padding='same',
    trainable=trainable, kernel_regularizer=kernel_regularizer,
    name='block2_conv2')(x)
 x = MaxPooling2D((2, 2), strides=(2, 2), name='block2_pool')(x)

 # Block 3
 x = Conv2D(256, (3, 3), activation=activation, padding='same',
    trainable=trainable, kernel_regularizer=kernel_regularizer,
    name='block3_conv1')(x)
 x = Conv2D(256, (3, 3), activation=activation, padding='same',
    trainable=trainable, kernel_regularizer=kernel_regularizer,
    name='block3_conv2')(x)
 x = Conv2D(256, (3, 3), activation=activation, padding='same',
    trainable=trainable, kernel_regularizer=kernel_regularizer,
    name='block3_conv3')(x)
 x = MaxPooling2D((2, 2), strides=(2, 2), name='block3_pool')(x)

 # Block 4
 x = Conv2D(512, (3, 3), activation=activation, padding='same',
    trainable=trainable, kernel_regularizer=kernel_regularizer,
    name='block4_conv1')(x)
 x = Conv2D(512, (3, 3), activation=activation, padding='same',
    trainable=trainable, kernel_regularizer=kernel_regularizer,
    name='block4_conv2')(x)
 x = Conv2D(512, (3, 3), activation=activation, padding='same',
    trainable=trainable, kernel_regularizer=kernel_regularizer,
    name='block4_conv3')(x)
 x = MaxPooling2D((2, 2), strides=(2, 2), name='block4_pool')(x)

 # Block 5
 x = Conv2D(512, (3, 3), activation=activation, padding='same',
    trainable=trainable, kernel_regularizer=kernel_regularizer,
    name='block5_conv1')(x)
 x = Conv2D(512, (3, 3), activation=activation, padding='same',
    trainable=trainable, kernel_regularizer=kernel_regularizer,
    name='block5_conv2')(x)
 x = Conv2D(512, (3, 3), activation=activation, padding='same',
    trainable=trainable, kernel_regularizer=kernel_regularizer,
    name='block5_conv3')(x)
 x = MaxPooling2D((2, 2), strides=(2, 2), name='block5_pool')(x)

 branch_1 = GlobalMaxPooling2D()(x)
 # branch_1 = BatchNormalization(momentum=bn_model)(branch_1)

 branch_2 = GlobalAveragePooling2D()(x)
 # branch_2 = BatchNormalization(momentum=bn_model)(branch_2)

 branch_3 = BatchNormalization(momentum=bn_model)(angle_input)

 x = (Concatenate()([branch_1, branch_2, branch_3]))
 x = Dense(1024, activation=activation, kernel_regularizer=kernel_regularizer)(x)
 # x = Dropout(0.5)(x)
 x = Dense(1024, activation=activation, kernel_regularizer=kernel_regularizer)(x)
 x = Dropout(0.6)(x)
 output = Dense(1, activation='sigmoid')(x)

 model = Model([img_input, angle_input], output)
 optimizer = Adam(lr=1e-5, beta_1=0.9, beta_2=0.999, epsilon=1e-8, decay=0.0)
 model.compile(loss='binary_crossentropy', optimizer=optimizer, metrics=['accuracy'])

 if weights is not None:
  # 将by_name设置成True
  model.load_weights(weights, by_name=True)
  # layer_weights = h5py.File(weights, 'r')
  # for idx in range(len(model.layers)):
  #  model.set_weights()
 print 'have prepared the model.'

 return model

补充知识:keras.layers.Dense()方法

keras.layers.Dense()是定义网络层的基本方法,执行的操作是:output = activation(dot(input,kernel)+ bias。

其中activation是激活函数,kernel是权重矩阵,bias是偏向量。如果层输入大于2,在进行初始点积之前会将其展平。

代码如下:

class Dense(Layer):
 """Just your regular densely-connected NN layer.
 `Dense` implements the operation:
 `output = activation(dot(input, kernel) + bias)`
 where `activation` is the element-wise activation function
 passed as the `activation` argument, `kernel` is a weights matrix
 created by the layer, and `bias` is a bias vector created by the layer
 (only applicable if `use_bias` is `True`).
 Note: if the input to the layer has a rank greater than 2, then
 it is flattened prior to the initial dot product with `kernel`.
 # Example
 ```python
  # as first layer in a sequential model:
  model = Sequential()
  model.add(Dense(32, input_shape=(16,)))
  # now the model will take as input arrays of shape (*, 16)
  # and output arrays of shape (*, 32)
  # after the first layer, you don't need to specify
  # the size of the input anymore:
  model.add(Dense(32))
 ```
 # Arguments
  units: Positive integer, dimensionality of the output space.
  activation: Activation function to use
   (see [activations](../activations.md)).
   If you don't specify anything, no activation is applied
   (ie. "linear" activation: `a(x) = x`).
  use_bias: Boolean, whether the layer uses a bias vector.
  kernel_initializer: Initializer for the `kernel` weights matrix
   (see [initializers](../initializers.md)).
  bias_initializer: Initializer for the bias vector
   (see [initializers](../initializers.md)).
  kernel_regularizer: Regularizer function applied to
   the `kernel` weights matrix
   (see [regularizer](../regularizers.md)).
  bias_regularizer: Regularizer function applied to the bias vector
   (see [regularizer](../regularizers.md)).
  activity_regularizer: Regularizer function applied to
   the output of the layer (its "activation").
   (see [regularizer](../regularizers.md)).
  kernel_constraint: Constraint function applied to
   the `kernel` weights matrix
   (see [constraints](../constraints.md)).
  bias_constraint: Constraint function applied to the bias vector
   (see [constraints](../constraints.md)).
 # Input shape
  nD tensor with shape: `(batch_size, ..., input_dim)`.
  The most common situation would be
  a 2D input with shape `(batch_size, input_dim)`.
 # Output shape
  nD tensor with shape: `(batch_size, ..., units)`.
  For instance, for a 2D input with shape `(batch_size, input_dim)`,
  the output would have shape `(batch_size, units)`.
 """
 
 @interfaces.legacy_dense_support
 def __init__(self, units,
     activation=None,
     use_bias=True,
     kernel_initializer='glorot_uniform',
     bias_initializer='zeros',
     kernel_regularizer=None,
     bias_regularizer=None,
     activity_regularizer=None,
     kernel_constraint=None,
     bias_constraint=None,
     **kwargs):
  if 'input_shape' not in kwargs and 'input_dim' in kwargs:
   kwargs['input_shape'] = (kwargs.pop('input_dim'),)
  super(Dense, self).__init__(**kwargs)
  self.units = units
  self.activation = activations.get(activation)
  self.use_bias = use_bias
  self.kernel_initializer = initializers.get(kernel_initializer)
  self.bias_initializer = initializers.get(bias_initializer)
  self.kernel_regularizer = regularizers.get(kernel_regularizer)
  self.bias_regularizer = regularizers.get(bias_regularizer)
  self.activity_regularizer = regularizers.get(activity_regularizer)
  self.kernel_constraint = constraints.get(kernel_constraint)
  self.bias_constraint = constraints.get(bias_constraint)
  self.input_spec = InputSpec(min_ndim=2)
  self.supports_masking = True
 
 def build(self, input_shape):
  assert len(input_shape) >= 2
  input_dim = input_shape[-1]
 
  self.kernel = self.add_weight(shape=(input_dim, self.units),
          initializer=self.kernel_initializer,
          name='kernel',
          regularizer=self.kernel_regularizer,
          constraint=self.kernel_constraint)
  if self.use_bias:
   self.bias = self.add_weight(shape=(self.units,),
          initializer=self.bias_initializer,
          name='bias',
          regularizer=self.bias_regularizer,
          constraint=self.bias_constraint)
  else:
   self.bias = None
  self.input_spec = InputSpec(min_ndim=2, axes={-1: input_dim})
  self.built = True
 
 def call(self, inputs):
  output = K.dot(inputs, self.kernel)
  if self.use_bias:
   output = K.bias_add(output, self.bias)
  if self.activation is not None:
   output = self.activation(output)
  return output
 
 def compute_output_shape(self, input_shape):
  assert input_shape and len(input_shape) >= 2
  assert input_shape[-1]
  output_shape = list(input_shape)
  output_shape[-1] = self.units
  return tuple(output_shape)
 
 def get_config(self):
  config = {
   'units': self.units,
   'activation': activations.serialize(self.activation),
   'use_bias': self.use_bias,
   'kernel_initializer': initializers.serialize(self.kernel_initializer),
   'bias_initializer': initializers.serialize(self.bias_initializer),
   'kernel_regularizer': regularizers.serialize(self.kernel_regularizer),
   'bias_regularizer': regularizers.serialize(self.bias_regularizer),
   'activity_regularizer': regularizers.serialize(self.activity_regularizer),
   'kernel_constraint': constraints.serialize(self.kernel_constraint),
   'bias_constraint': constraints.serialize(self.bias_constraint)
  }
  base_config = super(Dense, self).get_config()
  return dict(list(base_config.items()) + list(config.items()))

参数说明如下:

units:正整数,输出空间的维数。

activation: 激活函数。如果未指定任何内容,则不会应用任何激活函数。即“线性”激活:a(x)= x)。

use_bias:Boolean,该层是否使用偏向量。

kernel_initializer:权重矩阵的初始化方法。

bias_initializer:偏向量的初始化方法。

kernel_regularizer:权重矩阵的正则化方法。

bias_regularizer:偏向量的正则化方法。

activity_regularizer:输出层正则化方法。

kernel_constraint:权重矩阵约束函数。

bias_constraint:偏向量约束函数。

以上这篇使用keras根据层名称来初始化网络就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python分割和拼接字符串
Nov 01 Python
python中使用pyhook实现键盘监控的例子
Jul 18 Python
Python CSV模块使用实例
Apr 09 Python
python验证码识别的实例详解
Sep 09 Python
python 寻找优化使成本函数最小的最优解的方法
Dec 28 Python
pyqt5自定义信号实例解析
Jan 31 Python
Python基于递归实现电话号码映射功能示例
Apr 13 Python
python3 flask实现文件上传功能
Mar 20 Python
使用python将请求的requests headers参数格式化方法
Jan 02 Python
详解Python用三种方式统计词频的方法
Jul 29 Python
Python GUI自动化实现绕过验证码登录
Jan 10 Python
Python获取excel内容及相关操作代码实例
Aug 10 Python
关于Keras Dense层整理
May 21 #Python
Django如何使用redis作为缓存
May 21 #Python
如何打包Python Web项目实现免安装一键启动的方法
May 21 #Python
keras之权重初始化方式
May 21 #Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
May 21 #Python
Python使用os.listdir和os.walk获取文件路径
May 21 #Python
keras 权重保存和权重载入方式
May 21 #Python
You might like
关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况
2013/01/06 PHP
如何批量替换相对地址为绝对地址(利用bat批处理实现)
2013/05/27 PHP
强制PHP命令行脚本单进程运行的方法
2014/04/15 PHP
php获取YouTube视频信息的方法
2015/02/11 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
2016/03/18 PHP
Web层改进II-用xmlhttp 无声息提交复杂表单
2007/01/22 Javascript
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
javascript addBookmark 加入收藏 多浏览器兼容
2009/08/15 Javascript
JS截取url中问号后面参数的值信息
2014/04/29 Javascript
jquery果冻抖动效果实现方法
2015/01/15 Javascript
Javascript基础教程之定义和调用函数
2015/01/18 Javascript
javascript的几种继承方法介绍
2016/03/22 Javascript
js 显示日期时间的实例(时间过一秒加1)
2017/10/25 Javascript
如何利用@angular/cli V6.0直接开发PWA应用详解
2018/05/06 Javascript
JS使用Dijkstra算法求解最短路径
2019/01/17 Javascript
javascript设计模式 ? 备忘录模式原理与用法实例分析
2020/04/21 Javascript
详解JS函数防抖
2020/06/05 Javascript
Django中如何使用sass的方法步骤
2019/07/09 Python
对python3中的RE(正则表达式)-详细总结
2019/07/23 Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
2020/05/18 Python
Python Tornado核心及相关原理详解
2020/06/24 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
2020/08/24 Python
Django nginx配置实现过程详解
2020/09/10 Python
日本最大的药妆连锁店:Matsukiyo松本清药妆店
2017/11/23 全球购物
广州足迹信息技术有限公司Java软件工程师试题
2014/02/15 面试题
成品仓管员工作职责
2013/12/29 职场文书
家长会邀请书
2014/01/25 职场文书
初一科学教学反思
2014/01/27 职场文书
党员民主评议个人总结
2014/10/20 职场文书
2014年底个人工作总结
2015/03/10 职场文书
2015年全民创业工作总结
2015/07/23 职场文书
高中生综合素质评价范文
2015/08/18 职场文书
大学军训心得体会800字
2016/01/11 职场文书
励志语录:时光飞逝,请学会珍惜所有的人和事
2020/01/16 职场文书
python xlwt模块的使用解析
2021/04/13 Python
Python基础之数据结构详解
2021/04/28 Python