首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于ModelCheckpoint的图像分类细胞神经网络保存最佳参数

基于ModelCheckpoint的图像分类细胞神经网络保存最佳参数
EN

Stack Overflow用户
提问于 2020-08-03 16:43:40
回答 1查看 24关注 0票数 0

我正在用CNN做图像分类。

以下是我的模型:

代码语言:javascript
复制
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(200, 200, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))


model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(4, activation='softmax'))

model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])
history = model.fit(x_train,y_train,epochs=16,batch_size=64,validation_data=(x_val,y_val))

纪元结果如下:

代码语言:javascript
复制
Epoch 1/16
416/416 [==============================] - 832s 2s/step - loss: 0.7742 - accuracy: 0.8689 - val_loss: 0.5149 - val_accuracy: 0.8451
Epoch 2/16
416/416 [==============================] - 825s 2s/step - loss: 0.5608 - accuracy: 0.8585 - val_loss: 0.3776 - val_accuracy: 0.8808
Epoch 3/16
416/416 [==============================] - 775s 2s/step - loss: 0.1926 - accuracy: 0.9338 - val_loss: 0.3328 - val_accuracy: 0.9066
Epoch 4/16
416/416 [==============================] - 587s 1s/step - loss: 0.0984 - accuracy: 0.9650 - val_loss: 0.3163 - val_accuracy: 0.9388
Epoch 5/16
416/416 [==============================] - 578s 1s/step - loss: 0.0606 - accuracy: 0.9798 - val_loss: 0.3584 - val_accuracy: 0.9357
Epoch 6/16
416/416 [==============================] - 511s 1s/step - loss: 0.0457 - accuracy: 0.9860 - val_loss: 0.5067 - val_accuracy: 0.9360
Epoch 7/16
416/416 [==============================] - 476s 1s/step - loss: 0.3649 - accuracy: 0.8912 - val_loss: 0.4446 - val_accuracy: 0.8645
Epoch 8/16
416/416 [==============================] - 476s 1s/step - loss: 0.3108 - accuracy: 0.9006 - val_loss: 0.6096 - val_accuracy: 0.8681
Epoch 9/16
416/416 [==============================] - 477s 1s/step - loss: 0.2397 - accuracy: 0.9158 - val_loss: 0.4061 - val_accuracy: 0.9042
Epoch 10/16
416/416 [==============================] - 502s 1s/step - loss: 0.1334 - accuracy: 0.9532 - val_loss: 0.3673 - val_accuracy: 0.9281
Epoch 11/16
416/416 [==============================] - 478s 1s/step - loss: 0.2787 - accuracy: 0.9184 - val_loss: 0.6745 - val_accuracy: 0.9039
Epoch 12/16
416/416 [==============================] - 481s 1s/step - loss: 0.7476 - accuracy: 0.8649 - val_loss: 0.4643 - val_accuracy: 0.8777
Epoch 13/16
416/416 [==============================] - 488s 1s/step - loss: 0.2187 - accuracy: 0.9271 - val_loss: 0.3347 - val_accuracy: 0.9102
Epoch 14/16
416/416 [==============================] - 483s 1s/step - loss: 4.0347 - accuracy: 0.9171 - val_loss: 0.6267 - val_accuracy: 0.7980
Epoch 15/16
416/416 [==============================] - 476s 1s/step - loss: 0.5838 - accuracy: 0.8095 - val_loss: 0.4481 - val_accuracy: 0.8663
Epoch 16/16
416/416 [==============================] - 492s 1s/step - loss: 0.4916 - accuracy: 0.8520 - val_loss: 1.0406 - val_accuracy: 0.6113

我的第一个问题是,因为mode.fit将保留最后一个纪元结果,但我的最后一个纪元结果并不是最好的(基于最小val_loss,纪元4/16是最好的结果)

因此,我想知道如何使用pech4/16参数在模型上构建?

注意:我已经保存了模型。

我意识到,如果我在model.fit中添加ModelCheckpoing,那么可以保存最小val_loss。然而,因为我花了很长时间来运行代码,我想有没有可能直接从我保存的模型中提取最小val_loss结果,而不需要再次运行代码?

我的第二个问题是,我不理解ModelCheckpoint是如何工作的,因为我的理解是,ModelCheckpoint将在最好的时期停止。

如果我有一个如下所示的ModelCheckpoint:

代码语言:javascript
复制
mc = ModelCheckpoint('best_model.h5', monitor='val_loss', mode='min', save_best_only=True)

如果纪元为16并且最小val_loss发生在纪元4/16,那么使用ModelCheckpoing将在纪元4/16停止运行代码并保存参数。但是它不运行5到16纪元的其余部分,它怎么知道4纪元是最好的呢?或者实际上,使用ModelCehckpoint,代码仍然会运行16个时期,只保存最好的一个(时期4)?

谢谢!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-03 17:12:03

ModelCheckpoint不会停止训练。在每个时期之后,它会将结果与当前最好的结果进行比较,并根据此document code在两个结果中选择最好的,然后您只需重新加载保存的模型即可获得最佳权重。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63226303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档