难以使Keras示例适应客户数据

时间:2016-03-26 07:33:16

标签: python tensorflow deep-learning keras

我正在尝试使用由TensorFlow后端驱动的Keras运行以下网络。它改编自http://keras.io/examples/的“类似VGG”的卷轴:

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)

这会产生错误:

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

我已查看过以下帖子但尚无法解决此问题。任何帮助将不胜感激,并解释出现了什么问题。

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

更新

将此问题发布给Keras问题委员会(https://github.com/fchollet/keras/issues/2092)。有Gistsample data个链接可以让您重新创建问题。

1 个答案:

答案 0 :(得分:0)

解决了它。在脚本中,需要以下行来重塑"重塑"输入数组:

-seeds

实际上,我们在这里所做的只是添加一个有点冗余的通道维度来构建数组X_train = X_train.reshape(X_train.shape[0], 1, 128, 256)而不是(8144, 1, 128, 256)的形状。如果我们使用的是RGB阵列,那么它根本就不会冗余,因为它会是(8144, 128, 256)。底线:我的输入数组缺少通道维度,我认为我可以通过省略greyscales来逃避。事实证明,你仍然需要明确定义形状。

很棒的套餐。修复后,代码应按原样执行。