我一直在尝试保存我的神经网络模型的权重,以便我可以将其中的一些层用于另一个神经网络模型,以便在另一个数据集上进行训练。
预训练模型:
model = Sequential()
model.add(tf.keras.layers.Dense(100, input_shape=(X_train_orig_sm.shape)))
model.add(tf.keras.layers.Activation('relu'))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Dense(10))
model.add(tf.keras.layers.Activation('relu'))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Dense(1))
model.add(tf.keras.layers.Activation('sigmoid'))
model.summary()
# need sparse otherwise shape is wrong. check why
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
print('Fitting the data to the model')
batch_size = 20
epochs = 10
history = model.fit(X_train_orig_sm, Y_train_orig_sm, batch_size=batch_size, epochs=epochs, verbose=1, validation_split=0.2)
print('Evaluating the test data on the model')
我如何保存神经网络的权重:
model.save_weights("dnn_model.h5")
我如何尝试加载神经网络的权重:
dnn_model=model.load_weights("dnn_model.h5")
dnn_model.layers[5]
尝试加载模型时,出现以下错误:
AttributeError: 'NoneType' object has no attribute 'layers'
我似乎不明白为什么即使在保存模型之前训练了预训练的神经网络,神经网络的层也无法识别。任何建议、解决方案或方向将不胜感激。谢谢。
答案 0 :(得分:0)
当您调用 model.save_weights("dnn_model.h5")
时,您只会保存模型的“权重”。您不保存模型的实际结构。这就是您无法访问图层等的原因。
要保存实际模型,您可以调用下面的方法。
# save
model.save('dnn_model') # save as pb
model.save('dnn_model.h5') # save as HDF5
# load
dnn_model = tf.keras.models.load_model('dnn_model') # load as pb
dnn_model = tf.keras.models.load_model('dnn_model.h5') # load as HDF5
注意:您无需为名称添加扩展名即可保存为 pb。