ysz12316 长春工业大学 05月18日
VGG16 改良算法进行mnist识别(学习)
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(i,(48,48)),cv2.COLOR_GRAY2BGR)for i in x_test]
#第一步:通过np.newaxis函数把每一个图片增加一个维度变成(1,48,48,3)。所以就有了程序中的arr[np.newaxis]。
#第二步:通过np.concatenate把每个数组连接起来组成一个新的x_train数组,连接后的x_train数组shape为(10000,48,48,3)
x_train=np.concatenate([arr[np.newaxis]for arr in x_train])
x_test=np.concatenate([arr[np.newaxis]for arr in x_test])


x_train=x_train.astype("float32")/255
x_train=x_train.reshape((60000,48,48,3))
x_test=x_test.astype("float32")/255
x_test=x_test.reshape((10000,48,48,3))
y_train=to_categorical(y_train)
y_test=to_categorical(y_test)

#划出验证集
x_val=x_train[:10000]
y_val=y_train[:10000]
x_train=x_train[10000:]
y_train=y_train[10000:]

#建立模型
conv_base=VGG16(weights='imagenet',
include_top=False,
input_shape=(48,48,3))
conv_base.trainable=False
model=models.Sequential()
model.add(conv_base)
model.add(Flatten())
model.add(Dense(4096,activation="relu"))
model.add(Dropout(0.5))
# layer 14
model.add(Dense(4096, activation="relu"))
model.add(Dropout(0.5))
# layer 15
model.add(Dense(10,activation="softmax"))
model.summary()

#编译模型
model.compile(optimizer="rmsprop",loss="categorical_crossentropy",metrics=["accuracy"])

#训练模型
model.fit(x_train,y_train,batch_size=64,epochs=5,validation_data=(x_val,y_val))

#评估模型
test_loss,test_acc=model.evaluate(x_test,y_test,batch_size=64)
print("The accuracy is:"+str(test_acc))
...全文
39 点赞 收藏 回复
写回复
回复

还没有回复,快来抢沙发~

发动态
发帖子
汇编语言
创建于2007-08-27

1.9w+

社区成员

4.1w+

社区内容

汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区公告
暂无公告