【问题标题】:Saved pre-train model layer weights but cannot load the weights through H5PY保存了预训练模型层权重,但无法通过 H5PY 加载权重
【发布时间】:2021-04-13 11:38:17
【问题描述】:

我一直在尝试保存我的神经网络模型的权重,以便我可以将它的一些层用于另一个神经网络模型,以便在另一个数据集上进行训练。

预训练模型:

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'

我似乎不明白为什么即使在保存模型之前训练了预训练的神经网络,也无法识别神经网络的层。任何建议、解决方案或方向都将受到高度赞赏。谢谢。

【问题讨论】:

    标签: python tensorflow keras neural-network


    【解决方案1】:

    当您调用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 的名称无需添加扩展名。

    来源:https://www.tensorflow.org/tutorials/keras/save_and_load

    【讨论】:

      猜你喜欢
      • 2018-10-08
      • 2019-12-05
      • 2021-03-12
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-23
      • 1970-01-01
      相关资源
      最近更新 更多