Keras Convolution Rede Neural

votos
3

Agora eu estou tentando construir uma rede neural convolutional básico para fazer a classificação simples com mnist conjunto de dados usando keras. Eventualmente eu quero colocar minhas próprias imagens em Eu só quero construir uma rede simples para ter certeza de que eu tenho a estrutura de trabalho. portanto, o download dos dados mnist como mnint.pkl.gz descompactado e carregá-la em tuplos e matrizes, eventualmente, irregulares. Aqui está o meu código:

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)

Eu recebo um erro como tal:

'Wrong number of dimensions: expected 4, got 2 with shape 
(10,   784).')

Eu acho que isso significa que eu preciso colocá-lo em um tensor 4d Theano de tal forma que é tem (amostras, canais, linhas, colunas), mas não tenho idéia de como fazer isso. Além disso, quando eu quero especificamente para resolver o problema que eu sou depois que vamos carregar '.png' arquivos, eu estava em seguida, indo para colocá-los em matrizes numpy para alimentar dentro, mas parece que isso não vai funcionar. Alguém pode me dizer como posso obter imagens em tensores theano4d para usar neste código? obrigado

Publicado 03/12/2015 em 21:13
fonte usuário
Em outras línguas...                            


2 respostas

votos
4

Está certo que o código está esperando um tensor4. A estrutura convencional é (batch, channel, width, height). Neste caso, as imagens são monocromáticas tão channel=1Parece que você está usando um tamanho de lote de 10 e as imagens MNIST são 28 pixels de largura e 28 pixels de altura.

Você pode simplesmente remodelar os dados para o formato necessário. Se xé de forma (10, 784), em seguida, x.reshape(10, 1, 28, 28)terá o formato exigido.

Respondeu 04/12/2015 em 06:27
fonte usuário

votos
3

O código está à espera de uma 4-dimensional numpy matriz, não um tensor Théano (keras faz todo o tensor de manipulação Théano sob o capô).

Suas entradas, X_train e X_test precisa ser reformulado como segue:

X_train = X_train.reshape(-1, 1, 28, 28)
X_test = X_test.reshape(-1, 1, 28, 28)
Respondeu 25/09/2016 em 08:21
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more