【发布时间】:2020-10-18 15:56:21
【问题描述】:
我使用 TensorFlow 训练并保存了一个用于像素分类问题的前馈神经网络,测试准确率为 95%。在这个模型中,每个像素有 11 个特征。当我保存然后加载模型时出现问题。使用我在原始模型中使用的相同输入 X 和 Y,加载模型的准确度几乎为 0%。但我希望得到同样的 95% 的准确率!这是我使用的示例代码:
model = keras.Sequential()
model.add(keras.layers.Flatten(input_shape=(1, 11))) # my input shape (13851000, 11)
model.add(keras.layers.Dense(32, activation = 'relu'))
model.add(keras.layers.Dense(7))
model.summary()
optim = tf.keras.optimizers.Adam(learning_rate=0.01, beta_1=0.9,
beta_2=0.999, epsilon=1e-07,
amsgrad=False, name='Adam')
call1 = tf.keras.callbacks.EarlyStopping(
monitor='val_loss', min_delta=0, patience=3, verbose=0, mode='auto',
baseline=None, restore_best_weights=False)
model.compile(optimizer=optim,
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
history = model.fit(X_train, Y_train, epochs=100, validation_split = 0.2,
callbacks=[call1])
这里是原始模型的准确率:
print('\nTest accuracy:', test_acc)
> Test accuracy: 0.9543394446372986
现在,当我保存并加载模型时:
model.save('saved_model/my_model')
new_model = tf.keras.models.load_model('saved_model/my_model')
loss, acc = new_model.evaluate(X_test, Y_test, verbose=2)
print('Restored model, accuracy: {:5.2f}%'.format(100*acc))
> 432844/432844 - 439s - loss: 0.1413 - accuracy: 7.2197e-08
如您所见,准确度显着下降。一些附加信息:
info 1: Model.summary() 在两种情况下都返回相同的架构。
info 2: X_test.shape 返回一个形状为 (13851000, 11) 的矩阵,意思是 13851000 个像素,每个像素有 11 个特征
信息 3:我在加载并评估模型时收到以下警告:
WARNING:tensorflow:Model 是用 shape (None, 1, 11) 作为输入 Tensor("flatten_input_4:0", shape=(None, 1, 11), dtype=float32) 构建的,但它是在一个形状不兼容的输入(无,11)。
为了解决这个警告,我将 X_Test、Y_Test 重新调整为 3 维((13851000, 1, 11), (13851000, 1))并且警告消失了。但是,我的准确率仍然是 0%。
信息 4: print(tf.__version__) 返回 2.3.0。
信息 5: ls saved_model 返回 my_model 和 ls saved_model\my_model 返回 assets variables saved_model.pb
注意:我正在使用 Windows 10。
【问题讨论】:
标签: python tensorflow machine-learning save load