2017-05-03 48 views
0

我想使用下面的代码与我自己的输入图像,而不是mnist图像。但是,我很难将几个颜色的.jpg图像输入到一个类似于下面代码中使用的X_train的numpy数组中。我有一个名为数据的文件夹与另一个名为train的文件夹,其中包含我想用作我的X_train的多个图像。我可以为它们生成标签并对它们进行热门编码。我只是不知道如何让所有的图像都进入像X_train这样的好阵列。帮帮我?我没有看here,但我得到了一个值错误:当我刚刚复制并粘贴了汇总代码时,使用序列设置数组元素。如何准备多个RGB图像作为CNN的numpy阵列

import numpy as np 
np.random.seed(123) # for reproducibility 

from keras.models import Sequential 
from keras.layers import Dense, Dropout, Activation, Flatten 
from keras.layers import Convolution2D, MaxPooling2D 
from keras.utils import np_utils 
from keras.datasets import mnist 

# 4. Load pre-shuffled MNIST data into train and test sets 
(X_train, y_train), (X_test, y_test) = mnist.load_data() 

# 5. Preprocess input data 
X_train = X_train.reshape(X_train.shape[0], 1, 28, 28) 
X_test = X_test.reshape(X_test.shape[0], 1, 28, 28) 
X_train = X_train.astype('float32') 
X_test = X_test.astype('float32') 
X_train /= 255 
X_test /= 255 

# 6. Preprocess class labels 
Y_train = np_utils.to_categorical(y_train, 10) 
Y_test = np_utils.to_categorical(y_test, 10) 

# 7. Define model architecture 
model = Sequential() 

model.add(Convolution2D(32, 3, 3, activation='relu', input_shape=(1,28,28))) 
model.add(Convolution2D(32, 3, 3, activation='relu')) 
model.add(MaxPooling2D(pool_size=(2,2))) 
model.add(Dropout(0.25)) 

model.add(Flatten()) 
model.add(Dense(128, activation='relu')) 
model.add(Dropout(0.5)) 
model.add(Dense(10, activation='softmax')) 

# 8. Compile model 
model.compile(loss='categorical_crossentropy', 
       optimizer='adam', 
       metrics=['accuracy']) 

# 9. Fit model on training data 
model.fit(X_train, Y_train, 
      batch_size=32, nb_epoch=10, verbose=1) 

# 10. Evaluate model on test data 
score = model.evaluate(X_test, Y_test, verbose=0) 

回答

0

我假设您使用Theano并且您的jpgs有3个乐队。另外,您的jpgs应该与您在第一个卷积模型(28x28像素)中指示的输入形状具有相同的输入形状。在这种情况下,你可以重塑你所有的jpes有下面几行:

#create random data 
no_of_jpgs = 10 
jpgs = [np.random.randint(0,255,(28,28,3)) for i in range(no_of_jpgs)] 
jpgs = np.array(jpgs) 

#reshape data 
jpgs.reshape(no_of_jpgs, jpgs.shape[1], jpgs.shape[2], 3) 

现在你有一个数组:(功能,n_bands,X,Y)

此外,你应该改变你的input_shape使它支持的3条带:

model.add(Convolution2D(32, 3, 3, activation='relu', input_shape=(3, 28,28))) 

如果你有不同的形状或多个频带的JPG文件,只是改变在第一卷积层的input_shape值。