2017-10-14 122 views
1

我想在我的機器的GPU運行Cifar-10 CNN代碼,但我面臨着以下問題:CIFAR-10尺寸誤差Keras

尺寸(1)必須在區間[0,2),其中, 2是輸入中的維數。對於'metrics/acc/ArgMax'(op:'ArgMax'),輸入形狀爲:[?,?],[]。

這裏是我的代碼:

import os 
os.environ["THEANO_FLAGS"] = "mode=FAST_RUN,device=cuda0,floatX=float32,lib.cnmem=1" 
import theano 
from __future__ import print_function 
import keras 
from keras.datasets import cifar10 
from keras import optimizers 
from keras.preprocessing.image import ImageDataGenerator 
from keras.models import Sequential 
from keras.layers import Dense, Dropout, Activation, Flatten 
from keras.layers import Conv2D, MaxPooling2D 

from tensorflow.python.client import device_lib 
print(device_lib.list_local_devices()) 

[名稱: 「/ CPU:0」 DEVICE_TYPE: 「CPU」 memory_limit的:268435456 地方{ } 化身:5668889307863094193 ,名稱:「/ gpu:0」 device_type:「GPU」 memory_limit:1563603763 locality { bus_id:1 } 化身:18418621293925924623 physical_device_desc: 「設備:0,名稱:的GeForce GTX 960M,PCI總線ID:0000:01:00.0」 ]

import os 
import pickle 
import numpy as np 

batch_size = 32 
num_classes = 10 
epochs = 200 
data_augmentation = True 
num_predictions = 20 
save_dir = os.path.join(os.getcwd(), 'saved_models') 
model_name = 'keras_cifar10_trained_model.h5' 

# The data, shuffled and split between train and test sets: 
(x_train, y_train), (x_test, y_test) = cifar10.load_data() 
#x_train = x_train.reshape(50000, 3072) 
#x_test = x_test.reshape(10000, 3072) 
print('x_train shape:', x_train.shape) 
print(x_train.shape[0], 'train samples') 
print(x_test.shape[0], 'test samples') 

x_train形狀:(50000,32,32,3) 50000個火車樣品 10000測試樣品

# Convert class vectors to binary class matrices. 
y_train = keras.utils.to_categorical(y_train, num_classes) 
y_test = keras.utils.to_categorical(y_test, num_classes) 
model = Sequential() 

model.add(Conv2D(32, (3, 3), padding='same', 
       input_shape=x_train.shape[1:])) 
model.add(Activation('relu')) 
model.add(Conv2D(32, (3, 3))) 
model.add(Activation('relu')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Dropout(0.25)) 

model.add(Conv2D(64, (3, 3), padding='same')) 
model.add(Activation('relu')) 
model.add(Conv2D(64, (3, 3))) 
model.add(Activation('relu')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Dropout(0.25)) 

model.add(Flatten()) 
model.add(Dense(512)) 
model.add(Activation('relu')) 
model.add(Dropout(0.5)) 
model.add(Dense(num_classes)) 
model.add(Activation('softmax')) 

model.summary() 

Layer (type)     Output Shape    Param # 

conv2d_1 (Conv2D)   (None, 32, 32, 32)  896  
_________________________________________________________________ 
activation_1 (Activation) (None, 32, 32, 32)  0   
_________________________________________________________________ 
conv2d_2 (Conv2D)   (None, 30, 30, 32)  9248  
_________________________________________________________________ 
activation_2 (Activation) (None, 30, 30, 32)  0   
_________________________________________________________________ 
max_pooling2d_1 (MaxPooling2 (None, 15, 15, 32)  0   
_________________________________________________________________ 
dropout_1 (Dropout)   (None, 15, 15, 32)  0   
_________________________________________________________________ 
conv2d_3 (Conv2D)   (None, 15, 15, 64)  18496  
_________________________________________________________________ 
activation_3 (Activation) (None, 15, 15, 64)  0   
_________________________________________________________________ 
conv2d_4 (Conv2D)   (None, 13, 13, 64)  36928  
_________________________________________________________________ 
activation_4 (Activation) (None, 13, 13, 64)  0   
_________________________________________________________________ 
max_pooling2d_2 (MaxPooling2 (None, 6, 6, 64)   0   
_________________________________________________________________ 
dropout_2 (Dropout)   (None, 6, 6, 64)   0   
_________________________________________________________________ 
flatten_1 (Flatten)   (None, 2304)    0   
_________________________________________________________________ 
dense_1 (Dense)    (None, 512)    1180160 
_________________________________________________________________ 
activation_5 (Activation) (None, 512)    0   
_________________________________________________________________ 
dropout_3 (Dropout)   (None, 512)    0   
_________________________________________________________________ 
dense_2 (Dense)    (None, 10)    5130  
_________________________________________________________________ 
activation_6 (Activation) (None, 10)    0   

Total params: 1,250,858 
Trainable params: 1,250,858 
Non-trainable params: 0 

# initiate RMSprop optimizer 
opt = keras.optimizers.rmsprop(lr=0.0001, decay=1e-6) 
# Let's train the model using RMSprop 
model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy']) 

上執行的RMSprop優化的代碼,我得到以下錯誤:

InvalidArgumentError Traceback (most recent call last) ~\Anaconda3\lib\site-packages\tensorflow\python\framework\common_shapes.py in _call_cpp_shape_fn_impl(op, input_tensors_needed, input_tensors_as_shapes_needed, debug_python_shape_fn, require_shape_fn) 669 node_def_str, input_shapes, input_tensors, input_tensors_as_shapes, --> 670 status) 671 except errors.InvalidArgumentError as err:

。 。 。 。 。

ValueError: Dimension (-1) must be in the range [0, 2), where 2 is the number of dimensions in the input. for 'metrics/acc/ArgMax' (op: 'ArgMax') with input shapes: [?,?], [].

我在查看其他線程後嘗試了兩種不同的解決方案,但問題仍然存在。 建議的第一個解決方案是更新Tensorflow。 第二種解決方案是將訓練和測試數據從x_train形狀(50000,32,32,3)重塑爲x_train形狀:(50000,3072),但是接下來的錯誤是在Conv2D模型中重新塑形數據不能使用。

任何人都可以幫我解決這個問題嗎?任何幫助表示讚賞。

+0

你能打印出'model.summary()'嗎? –

+0

@MarcinMożejko我編輯了我的文章。你可以看看 –

+0

什麼是'y_train'形狀? –

回答

0

我重新安裝了Anaconda,Tensorflow和Keras後解決了我的問題