我写了一些简单的代码来学习Keras:
from tensorflow import keras
def main():
(x_train, y_train), (x_test, y_test) = keras.datasets.cifar10.load_data()
model = keras.Sequential()
model.add(keras.layers.Conv2D(16, 3, padding='same', activation='relu'))
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(10, activation='softmax'))
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train, y_train, epochs=4)
model.summary()
if __name__ == '__main__':
main()
但是似乎什么也没学。不喜欢它应该学很多,但是至少应该减少损耗并稍微提高精度。但是两者在每个时代都是一样的。
我使用Pytorch编写了完全相同的模型,并且达到了约35%的准确性。 tensorflow + keras中的这个值停留在10%。
tensorflow-gpu v1.9
我想念什么?
答案 0 :(得分:0)
我认为此问题的默认学习率很高。尝试类似
opt=keras.optimizers.Adam(lr=1.e-5)
model.compile(optimizer=opt, loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
答案 1 :(得分:0)
我检查了Adam
和keras
中PyTorch
使用的默认学习率,它们都使用1e-3
。因此,假设两个模型都使用默认值,学习率就不是问题。
或者,我认为这与权重初始化有关,权重初始化由keras
中的每一层显式处理,而不是PyTorch
中的每一层处理。
只需将训练行更改为以下内容,
model.fit(x_train / 255。,y_train,shuffle = True, validation_data =(x_test / 255。,y_test),纪元= 4)
您应该观察到培训和验证的准确性均达到60%左右。
我对PyTorch
不熟悉,但是我建议您使用keras
网络使用的权重来初始化PyTorch
网络中的权重。这样,您将有一个公平的比较。