当前位置: 首页 > 后端技术 > Python

kerasmnist例子

时间:2023-03-26 13:45:05 Python

目的:实现mnist分类1.加载mnist图像数据(train_x,train_y),(test_x,test_y)=mnist.load_data()2.修改数据类型,数据归一化#将数据转为浮点数x_train=train_x。astype('float32')y_train=train_y.astype('float32')x_test=test_x.astype('float32')y_test=test_y.astype('float32')#数据归一化x_train/=255x_test/=255#标签one_hont编码y_train=keras.utils.to_categorical(y_train,num_classes=10)y_test=keras.utils.to_categorical(y_test,num_classes=10)修改数据形状x_train=x_train.reshape(60000,28,28,1)x_test=x_test.reshape(10000,28,28,1)4.构建学习网络模型=Sequential([Conv2D(filters=6,kernel_size=(5,5),padding='valid',activation='tanh',input_shape=(28,28,1)),MaxPooling2D(pool_size=(2,2)),Conv2D(filters=16,kernel_size=(5,5),padding='valid',activation='tanh'),MaxPooling2D(pool_size=(2,2)),Flatten(),Dense(120,activation='tanh'),Dense(84,activation='tanh'),密集(10,activation='softmax')])5.配置学习网络model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['acc'])6.开始训练model.fit(x_train,y_train,batch_size=64,epochs=20,verbose=1,validation_split=0.2,shuffle=True)7.Evaluationnetworkscore=model.evaluate(x_test,y_test,batch_size=64)print(score)遇到问题:1.ValueError:Negativedimensionsizecausedbysubtracting5from1用于“conv2d_1/卷积”(操作:“Conv2D”),输入形状:[?,1,28,28],[5,5,28,6]。这是因为原案例使用Theano作为keras的背景,Theano的格式是(1,28,28)。如果是TensorFlow,需要修改inputformat为(28,28,1)2.检查输入时报错:expectedconv2d_1_inputtohave4dimensions,butgotarraywithshape(60000,28,28)直接导入的mnist数据是(60000,28,28),而你的cnn网络需要的是(60000,28,28,1),所以你需要修改矩阵形状为(60000,28,28,1)x_train=x_train.reshape(60000,28,28,1)x_test=x_test.reshape(10000,28,28,1)完整代码importkerasfromkeras.datasetsimportmnistfromkeras.modelsimportSequentialfromkeras.layersimportDense,Flattenfromkeras.layersimportConv2D,最大Pooling2Dif__name__==“__main__”:(train_x,train_y),(test_x,test_y)=mnist.load_data()x_train=train_x.astype('float32')y_train=train_y.astype('float32')x_test=test_x.astype('float32')y_test=test_y.astype('float32')x_train/=255x_test/=255y_train=keras.utils.to_categorical(y_train,num_classes=10)y_test=keras.utils.to_categorical(y_test,num_classes=10)x_train=x_train.reshape(60000,28,28,1)x_test=x_test.reshape(10000,28,28,1)model=Sequential([Conv2D(filters=6,kernel_size=(5,5),padding='有效',activation='relu',input_shape=(28,28,1)),MaxPooling2D(pool_size=(2,2)),Conv2D(filters=16,kernel_size=(5,5),padding='valid',activation='relu'),MaxPooling2D(pool_size=(2,2)),Flatten(),Dense(120,activation='relu'),Dense(84,activation='relu'),Dense(10,activation='softmax')])model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['acc'])model.fit(x_train,y_train,batch_size=64,epochs=20,verbose=1,validation_split=0.2,shuffle=True)score=model。评估(x_test,y_test,batch_size=64)打印(分数)model.save('lenet5.h5')

猜你喜欢