较浅的密集型网络的迁移学习
已知别人的模型准确率很不错,我的项目和他的一样,数据集都是28*28的像素图片,但分类的类别不一样。例如别人的模型是将图片分类识别8类标签,而我只需要二分类两种标签。我可以使用他的已训练好的模型的底层网络,直接充当我的底层网络。然后更改输出层,或者更改层数等参数。
他的项目(A) 我的项目(B) 他的训练集X_train_A 我的训练集X_train_B
代码步骤:
model_A = keras.models.Sequential()
model_A.add(keras.layers.Flatten(input_shape=[28, 28]))
for n_hidden in (300, 100, 50, 50, 50):
model_A.add(keras.layers.Dense(n_hidden, activation="selu"))
model_A.add(keras.layers.Dense(8, activation="softmax"))
model_A.compile(loss="sparse_categorical_crossentropy",
optimizer=keras.optimizers.SGD(learning_rate=1e-3),
metrics=["accuracy"])
history = model_A.fit(X_train_A, y_train_A, epochs=20,
validation_data=(X_valid_A, y_valid_A))
保存他的模型为h5格式文件:
model_A.save("my_model_A.h5")
得出在验证集最佳准确率为0.92
之后,先尝试独立构建我自己的模型: (由于是二分类,所以输出激活函数用sigmoid)
model_B = keras.models.Sequential()
model_B.add(keras.layers.Flatten(input_shape=[28, 28]))
for n_hidden in (300, 100, 50, 50, 50):
model_B.add(keras.layers.Dense(n_hidden, activation="selu"))
model_B.add(keras.layers.Dense(1, activation="sigmoid"))
model_B.compile(loss="binary_crossentropy",
optimizer=keras.optimizers.SGD(learning_rate=1e-3),
metrics=["accuracy"])
history = model_B.fit(X_train_B, y_train_B, epochs=20,
val