我正在使用这个教程学习模型的迁移学习。从中我们可以看到他的单个epoch平均只需要1秒钟。
Epoch 1/1001080/1080 [==============================] - 10s 10ms/step - loss: 3.6862 - acc: 0.2000Epoch 2/1001080/1080 [==============================] - 1s 1ms/step - loss: 3.0746 - acc: 0.2574Epoch 3/1001080/1080 [==============================] - 1s 1ms/step - loss: 2.6839 - acc: 0.3185Epoch 4/1001080/1080 [==============================] - 1s 1ms/step - loss: 2.3929 - acc: 0.3583Epoch 5/1001080/1080 [==============================] - 1s 1ms/step - loss: 2.1382 - acc: 0.3870Epoch 6/1001080/1080 [==============================] - 1s 1ms/step - loss: 1.7810 - acc: 0.4593
但是当我为我的cifar模型使用几乎相同的代码时,我的单个epoch运行大约需要1小时。
Train on 50000 samples 3744/50000 [=>............................] - ETA: 43:38 - loss: 3.3223 - acc: 0.17601
我的代码如下
from tensorflow.keras.applications import ResNet50from tensorflow.keras.layers import GlobalAveragePooling2D, Dense, Dropoutfrom tensorflow.keras import Model(x_train, y_train), (x_test, y_test) = tf.keras.datasets.cifar10.load_data()x_train = x_train / 255.0x_test = x_test / 255.0y_train = to_categorical(y_train)y_test = to_categorical(y_test)base_model = ResNet50(weights= None, include_top=False, input_shape= (32,32,3))x = base_model.outputx = GlobalAveragePooling2D()(x)x = Dropout(0.4)(x)predictions = Dense(10 , activation= 'softmax')(x)model = Model(inputs = base_model.input, outputs = predictions)model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc'])hist = model.fit(x_train, y_train)
请注意,我在这个模型中使用的是cifar 10数据集。我的代码或数据有什么问题吗?我该如何改进?一个epoch需要1小时实在是太长了。我还有NVIDIA MX-110 2GB,TensorFlow当然是在使用它。
回答:
我复制并运行了你的代码,为了让它运行,我不得不进行以下修改
根据model.fit的文档,如果你没有指定批量大小,默认值为32。所以对于50,000个样本/32=1563步。不知为何在你的代码中批量大小默认设置为1。我不知道为什么。所以你可以设置batch_size=50,这样你将需要1000步。为了进一步加速,我会设置weights=”imagenet”并冻结基础模型中的层,如下所示
for layer in base_model.layers: layer.trainable = False#if you set batch_size=50, weights="imagenet" with the base model frozen you get50000Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/resnet/resnet50_weights_tf_dim_ordering_tf_kernels_notop.h594773248/94765736 [==============================] - 5s 0us/stepEpoch 1/21000/1000 [==============================] - 16s 16ms/step - loss: 2.5101 - acc: 0.1487Epoch 2/21000/1000 [==============================] - 10s 10ms/step - loss: 2.1159 - acc: 0.2249