我想保存keras模型,我想保存每个时期的权重,以获得最佳权重。我怎么做到的
任何帮助将不胜感激。
编码:
def createModel():
input_shape=(1, 22, 5, 3844)
model = Sequential()
#C1
model.add(Conv3D(16, (22, 5, 5), strides=(1, 2, 2), padding='same',activation='relu',data_format= "channels_first", input_shape=input_shape))
model.add(keras.layers.MaxPooling3D(pool_size=(1, 2, 2),data_format= "channels_first", padding='same'))
model.add(BatchNormalization())
#C2
model.add(Conv3D(32, (1, 3, 3), strides=(1, 1,1), padding='same',data_format= "channels_first", activation='relu'))#incertezza se togliere padding
model.add(keras.layers.MaxPooling3D(pool_size=(1,2, 2),data_format= "channels_first", ))
model.add(BatchNormalization())
#C3
model.add(Conv3D(64, (1,3, 3), strides=(1, 1,1), padding='same',data_format= "channels_first", activation='relu'))#incertezza se togliere padding
model.add(keras.layers.MaxPooling3D(pool_size=(1,2, 2),data_format= "channels_first",padding='same' ))
model.add(Dense(64, input_dim=64, kernel_regularizer=regularizers.l2(0.01), activity_regularizer=regularizers.l1(0.01)))
model.add(BatchNormalization())
model.add(Flatten())
model.add(Dropout(0.5))
model.add(Dense(256, activation='sigmoid'))
model.add(Dropout(0.5))
model.add(Dense(2, activation='softmax'))
opt_adam = keras.optimizers.Adam(lr=0.00001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)
model.compile(loss='categorical_crossentropy', optimizer=opt_adam, metrics=['accuracy'])
return model
4条答案
按热度按时间91zkwejq1#
model.get_weights()
将以numpy数组的形式返回一个Tensor。您可以使用np.save()
将这些权重保存在扩展名为.npy
的文件中。要在每个epoch保存权重,您可以在Keras中使用称为回调的东西。
在执行
model.fit()
之前,请定义一个检查点,如下所示:checkpoint = ModelCheckpoint(.....)
,将参数‘period’分配为1,其分配时期的周期性。这个应该够了efzxgjgh2#
您可以使用
tf.keras.callbacks.ModelCheckpoint
编写ModelCheckpoint回调来保存每个epoch的权重。如果你使用的是最新的Tensorflow,比如TF2.1
或更高版本,那么你需要使用save_freq='epoch'
来保存每个epoch的权重,而不是使用period=1
。请检查整个example here回调如下
调用模型训练
希望这能帮上忙。谢谢!
xoshrz7s3#
你应该同时使用model.get_weights()和LambdaCallback函数:
1.model.get_weights():以Numpy数组的形式返回模型中所有权重Tensor的列表。
1.* Lambda回调 *:这个回调是用匿名函数构造的,这些函数将在适当的时候被调用
当你的代码被考虑时,你应该写 callback 函数并添加到你的 model 中:
此代码将所有层中的所有权重写入json文件。如果你想保存权重在特定的层,只要改变代码与
cngwdvgl4#
我不确定它是否会工作,但你可以尝试编写回调函数,并在回调函数中保存权重。
例
源= https://medium.com/@italojs/saving-your-weights-for-each-epoch-keras-callbacks-b494d9648202