使用keras根据层名称来初始化网络
keras根据层名称来初始化网络
defget_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) #Block1 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) #Block2 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) #Block3 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) #Block4 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) #Block5 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']) ifweightsisnotNone: #将by_name设置成True model.load_weights(weights,by_name=True) #layer_weights=h5py.File(weights,'r') #foridxinrange(len(model.layers)): #model.set_weights() print'havepreparedthemodel.' returnmodel
补充知识:keras.layers.Dense()方法
keras.layers.Dense()是定义网络层的基本方法,执行的操作是:output=activation(dot(input,kernel)+bias。
其中activation是激活函数,kernel是权重矩阵,bias是偏向量。如果层输入大于2,在进行初始点积之前会将其展平。
代码如下:
classDense(Layer): """Justyourregulardensely-connectedNNlayer. `Dense`implementstheoperation: `output=activation(dot(input,kernel)+bias)` where`activation`istheelement-wiseactivationfunction passedasthe`activation`argument,`kernel`isaweightsmatrix createdbythelayer,and`bias`isabiasvectorcreatedbythelayer (onlyapplicableif`use_bias`is`True`). Note:iftheinputtothelayerhasarankgreaterthan2,then itisflattenedpriortotheinitialdotproductwith`kernel`. #Example ```python #asfirstlayerinasequentialmodel: model=Sequential() model.add(Dense(32,input_shape=(16,))) #nowthemodelwilltakeasinputarraysofshape(*,16) #andoutputarraysofshape(*,32) #afterthefirstlayer,youdon'tneedtospecify #thesizeoftheinputanymore: model.add(Dense(32)) ``` #Arguments units:Positiveinteger,dimensionalityoftheoutputspace. activation:Activationfunctiontouse (see[activations](../activations.md)). Ifyoudon'tspecifyanything,noactivationisapplied (ie."linear"activation:`a(x)=x`). use_bias:Boolean,whetherthelayerusesabiasvector. kernel_initializer:Initializerforthe`kernel`weightsmatrix (see[initializers](../initializers.md)). bias_initializer:Initializerforthebiasvector (see[initializers](../initializers.md)). kernel_regularizer:Regularizerfunctionappliedto the`kernel`weightsmatrix (see[regularizer](../regularizers.md)). bias_regularizer:Regularizerfunctionappliedtothebiasvector (see[regularizer](../regularizers.md)). activity_regularizer:Regularizerfunctionappliedto theoutputofthelayer(its"activation"). (see[regularizer](../regularizers.md)). kernel_constraint:Constraintfunctionappliedto the`kernel`weightsmatrix (see[constraints](../constraints.md)). bias_constraint:Constraintfunctionappliedtothebiasvector (see[constraints](../constraints.md)). #Inputshape nDtensorwithshape:`(batch_size,...,input_dim)`. Themostcommonsituationwouldbe a2Dinputwithshape`(batch_size,input_dim)`. #Outputshape nDtensorwithshape:`(batch_size,...,units)`. Forinstance,fora2Dinputwithshape`(batch_size,input_dim)`, theoutputwouldhaveshape`(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'notinkwargsand'input_dim'inkwargs: 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 defbuild(self,input_shape): assertlen(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) ifself.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 defcall(self,inputs): output=K.dot(inputs,self.kernel) ifself.use_bias: output=K.bias_add(output,self.bias) ifself.activationisnotNone: output=self.activation(output) returnoutput defcompute_output_shape(self,input_shape): assertinput_shapeandlen(input_shape)>=2 assertinput_shape[-1] output_shape=list(input_shape) output_shape[-1]=self.units returntuple(output_shape) defget_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() returndict(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根据层名称来初始化网络就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。