2017-10-14 16 views
1

私は私のマシンのGPUでCifar-10 CNNコードを実行しようとしていますが、私は次の問題に直面しています:CIFAR-10寸法誤差Keras

寸法は(-1)2)ここで、0 [範囲でなければなりません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 ローカリティ{ bus_id:1 } 化身:18418621293925924623 physical_device_desc: "デバイス:0、名前:のGeForce GTX 960M、PCIバス番号: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の列車のサンプルRMSpropオプティマイザのコードを実行するには 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']) 

私は次のエラーを取得する:

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: [?,?], [].

他のスレッドを参照して2つのソリューションを試しましたが、問題は引き続き発生します。 提案された最初の解決策は、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を再インストールしても問題が解決しました