2017-05-03 44 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值。