我现在正在尝试使用keras构建一个基本的卷积神经网络,使用mnist数据集进行简单分类。最终我想要放入自己的图像,但我只想先构建一个简单的网络来确保结构正常。所以我下载了mnist数据作为mnist.pkl.gz,将其解压并加载到元组中,最终转换为numpy数组。以下是我的代码:
import numpy as np
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation, Flatten
from keras.layers.convolutional import Convolution2D, MaxPooling2D
from keras.optimizers import SGD
from PIL import Image as IM
import theano
from sklearn.cross_validation import train_test_split
import cPickle
import gzip
f=gzip.open('mnist.pkl.gz')
data1,data2,data3=cPickle.load(f)
f.close()
X=data1[0]
Y=data1[1]
x=X[0:15000,:]
y=Y[0:15000]
X_train,X_test,y_train,y_test=train_test_split(x,y,test_size
=0.33,random_state=99)
model=Sequential()
model.add(Convolution2D(10,5,5,border_mode='valid',
input_shape= (1,28,28)))
model.add(Activation('tanh'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(10))
model.add(Activation('softmax'))
sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error', optimizer=sgd)
model.fit(X_train,y_train, batch_size=10, nb_epoch=10)
score=model.evaluate(X_test,y_test,batch_size=10)
print(score)
我遇到了这样的错误:
'Wrong number of dimensions: expected 4, got 2 with shape
(10, 784).')
我认为这意味着我需要将它放入一个theano 4d张量中,使其具有(样本,通道,行,列),但我不知道如何做到这一点。此外,当我特别想解决我所追求的问题时,我会加载'.png'文件,然后将它们放入numpy矩阵中进行馈送,但看起来这样做行不通。有人能告诉我如何将图像转换成theano 4d张量以在此代码中使用吗?谢谢