VGG16进行微调,训练mnist数据集

本文介绍了使用预训练的VGG16模型在MNIST数据集上进行微调,通过这种方法,准确率从0.11提升到0.94,展示了深度学习中迁移学习的优势。
摘要由CSDN通过智能技术生成

直接用mnist训练VGG16,得到的准确率只有0.11左右,所以我用keras内置的用imagenet训练的VGG16进行微调,训练mnist,准确率达到0.94,得到了很大的提升。

from keras.applications import VGG16
from keras.datasets import mnist
from keras.utils import to_categorical
from keras import models
from keras.layers.core import Dense,Flatten,Dropout
import cv2
import numpy as np

#加载数据
(x_train,y_train),(x_test,y_test)=mnist.load_data()
#VGG16模型,权重由ImageNet训练而来,模型的默认输入尺寸是224x224,但是最小是48x48
#修改数据集的尺寸、将灰度图像转换为rgb图像
x_train=[cv2.cvtColor(cv2.resize(i,(48,48)),cv2.COLOR_GRAY2BGR)for i in x_train]
x_test=[cv2.cvtColor(cv2.resize
  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
VGG16是一个用于图像分类的深度卷积神经网络模型,它在ImageNet数据集上的表现非常优秀。MNIST是一个手写数字分类数据集,它只有10个分类。因此,使用VGG16模型来训练MNIST数据集可能会有一些过度参数化的问题。但是,我们可以通过微调(fine-tuning)VGG16模型来适应MNIST数据集,并得到比基本卷积神经网络更好的结果。 以下是使用Keras库在MNIST数据集微调VGG16模型的示例代码: ```python from keras.datasets import mnist from keras.models import Sequential from keras.layers import Dense, Flatten from keras.applications.vgg16 import VGG16 from keras.optimizers import SGD from keras.utils import to_categorical # 加载MNIST数据集 (X_train, y_train), (X_test, y_test) = mnist.load_data() # 将像素值缩放到0到1之间 X_train = X_train.astype('float32') / 255 X_test = X_test.astype('float32') / 255 # 将标签转换为one-hot编码 y_train = to_categorical(y_train, 10) y_test = to_categorical(y_test, 10) # 加载预训练VGG16模型 vgg16 = VGG16(weights='imagenet', include_top=False, input_shape=(28, 28, 3)) # 冻结VGG16模型的所有层 for layer in vgg16.layers: layer.trainable = False # 添加新的全连接层 model = Sequential() model.add(Flatten(input_shape=(28, 28))) model.add(Dense(256, activation='relu')) model.add(Dense(10, activation='softmax')) # 将VGG16模型和新的全连接层组合在一起 model.add(vgg16) # 编译模型 model.compile(loss='categorical_crossentropy', optimizer=SGD(lr=1e-4, momentum=0.9), metrics=['accuracy']) # 训练模型 model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=10, batch_size=32) ``` 在上面的示例代码中,我们首先加载MNIST数据集并将像素值缩放到0到1之间。然后,我们加载预训练VGG16模型,并冻结所有层,以便不会更新它们的权重。接下来,我们添加一个新的全连接层,并将VGG16模型和新的全连接层组合在一起。最后,我们编译模型并训练它。 请注意,我们将VGG16模型的输入形状设置为(28,28,3),而MNIST数据集的图像是灰度图像,所以我们将其转换为具有三个通道的虚拟RGB图像。这是因为VGG16模型是在具有三个通道的图像上进行训练的。 在训练过程中,我们使用了随机梯度下降(SGD)优化器和交叉熵损失函数,并在每个epoch中进行了验证。我们使用了批量大小为32,并在10个epoch中训练模型。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值