Dificuldade de adaptação Keras exemplo para dados de clientes

votos
1

Estou tentando executar o seguinte rede com Keras, alimentado por um backend TensorFlow. É uma adaptação do convnet VGG-like de http://keras.io/examples/ :

import os 
import sys
import json
import model_control 
from numpy import loadtxt, asarray
from pandas import read_csv
from scipy.ndimage import imread
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Convolution2D, MaxPooling2D
from keras.optimizers import SGD

Y_train = loadtxt(model_control.y_train_file, delimiter=',', dtype = int)

train_files = os.listdir(model_control.train_img_path)
train_files = ['%s/%s' % (model_control.train_img_path, x) for x in train_files if 'jpg' in x]
X_train = asarray([imread(x) for x in train_files])

X_train.shape #..(8144, 128, 256) (a numpy array of 8144 128x256 greyscale, i.e. single-channel, images)
Y_train.shape #..(8144,) (A 1-d numpy array of integer class labels) 

model = Sequential()

model.add(Convolution2D(32, 5, 5, border_mode='valid', input_shape=(1, 128, 256)))
model.add(Activation('relu'))
model.add(Convolution2D(32, 5, 5))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Convolution2D(64, 5, 5, border_mode='valid'))
model.add(Activation('relu'))
model.add(Convolution2D(64, 5, 5))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(256))
model.add(Activation('relu'))
model.add(Dropout(0.5))

model.add(Dense(10))
model.add(Activation('softmax'))

sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd)

model.fit(X_train, Y_train, batch_size=32, nb_epoch=1, verbose=1)

Isso produz o erro:

ValueError: Cannot feed value of shape (32, 128, 256) for Tensor u'Placeholder_89:0', which has shape '(?, 1, 128, 256)'

Eu verifiquei as seguintes mensagens, mas não têm sido capazes de resolver isso ainda. Qualquer ajuda seria apreciada, juntamente com uma explicação sobre o que está acontecendo de errado.

    https://groups.google.com/forum/#!topic/keras-users/Vb7MhSqne0Y http://stackoverflow.com/questions/33974231/tensorflow-error-using-my-own-data

ATUALIZAR

Postei esta pergunta ao conselho questão Keras ( https://github.com/fchollet/keras/issues/2092 ). Há Gist e dados de amostra links que permitirão que você recriar o problema.

Publicado 26/03/2016 em 05:33
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Resolvi-o. No roteiro, a seguinte linha é necessária para "remodelar" a matriz de entrada:

X_train = X_train.reshape(X_train.shape[0], 1, 128, 256)

Realmente, tudo o que estamos fazendo aqui é a adição de uma dimensão canal um pouco redundante para fazer a forma da matriz (8144, 1, 128, 256)em vez de (8144, 128, 256). Se estivéssemos usando uma matriz RGB isso não seria redundante em todos, uma vez que seria (8144, 3, 128, 256). Bottom line: a minha matriz de entrada estava faltando a dimensão do canal, que eu pensei que eu poderia sair com a omissão de escalas de cinzento. Acontece que você ainda precisa definir explicitamente a forma.

Grande pacote. Uma vez fixado o código deve executar como está.

Respondeu 26/03/2016 em 23:35
fonte usuário

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