見よう見まねで、CNNのコードを書いて実行しました。
エラーが発生しまして、エラー内容を読んでも、どうも理解できません。
どなたか、お詳しい方、ご指導お願いいたします。
from keras.models import Sequential from keras.layers.convolutional import Convolution2D, MaxPooling2D from keras.layers.core import Dense, Dropout, Activation, Flatten from keras.optimizers import Adadelta from keras.callbacks import EarlyStopping import keras from keras.datasets import mnist from keras.optimizers import RMSprop # MNISTデータを読込む (x_train, y_train), (x_test, y_test) = mnist.load_data() # MNISTデータを加工する x_train = x_train.reshape(60000, 784) x_test = x_test.reshape(10000, 784) x_train = x_train.astype('float32') x_test = x_test.astype('float32') x_train /= 255 x_test /= 255 y_train = keras.utils.to_categorical(y_train, 10) y_test = keras.utils.to_categorical(y_test, 10) # 各層のパラメータ nb_filters = 10 # 畳み込みフィルタ数 nb_conv = 3 # 畳み込みフィルタの縦横pixel数 nb_pool = 2 # プーリングを行う範囲の縦横pixel数 nb_classes = 10 # 分類するクラス数 nb_epoch = 50 # 最適化計算のループ回数 # 特徴量抽出 model = Sequential() model.add(Convolution2D(nb_filters, nb_conv, nb_conv)) # 畳み込みフィルタ層 model.add(Activation("relu")) # 最適化関数 model.add(MaxPooling2D(pool_size=(nb_pool, nb_pool))) # プーリング層 model.add(Dropout(0.2)) # ドロップアウト層 # 特徴量に基づいた分類 model.add(Flatten()) # 全結合層入力のためのデータの一次元化(図1では省略している) model.add(Dense(128)) # 全結合層 model.add(Activation("relu")) # 最適化関数 model.add(Dropout(0.2)) # ドロップアウト層 model.add(Dense(nb_classes)) # 出力層(全結合層:ノードの数は分類クラス数) model.add(Activation("softmax")) # 出力層 #モデルのコンパイル model.compile(loss="categorical_crossentropy", optimizer="adadelta", metrics=["accuracy"]) # モデルの学習 early_stopping = EarlyStopping(patience=2, verbose=1) model.fit(x_train, y_train, nb_epoch=nb_epoch, batch_size=128, verbose=1, validation_split=0.2, callbacks=[early_stopping]) # patientce:何回連続で損失の最小値が更新されなかったらループを止めるか # verbose:コマンドラインにコメントを出力する場合は"1"と設定 # batch_size:計算効率化のために分割された訓練データの1グループあたりのデータ数 # validation_split:全ての画像の内、評価画像として用いる割合(0.2なら最後の20%) # モデルの評価 classes = model.predict(x_test, batch_size=128, verbose=True) print(classes[0])
C:\python\anaconda\pgm\lib\site-packages\ipykernel_launcher.py:35: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(10, (3, 3))` C:\python\anaconda\pgm\lib\site-packages\ipykernel_launcher.py:54: UserWarning: The `nb_epoch` argument in `fit` has been renamed `epochs`. --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-180-ade778f5d9df> in <module> 52 early_stopping = EarlyStopping(patience=2, verbose=1) 53 ---> 54 model.fit(x_train, y_train, nb_epoch=nb_epoch, batch_size=128, verbose=1, validation_split=0.2, callbacks=[early_stopping]) 55 56 # patientce:何回連続で損失の最小値が更新されなかったらループを止めるか C:\python\anaconda\pgm\lib\site-packages\keras\engine\training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, **kwargs) 950 sample_weight=sample_weight, 951 class_weight=class_weight, --> 952 batch_size=batch_size) 953 # Prepare validation data. 954 do_validation = False C:\python\anaconda\pgm\lib\site-packages\keras\engine\training.py in _standardize_user_data(self, x, y, sample_weight, class_weight, check_array_lengths, batch_size) 675 # to match the value shapes. 676 if not self.inputs: --> 677 self._set_inputs(x) 678 679 if y is not None: C:\python\anaconda\pgm\lib\site-packages\keras\engine\training.py in _set_inputs(self, inputs, outputs, training) 587 assert len(inputs) == 1 588 inputs = inputs[0] --> 589 self.build(input_shape=(None,) + inputs.shape[1:]) 590 return 591 C:\python\anaconda\pgm\lib\site-packages\keras\engine\sequential.py in build(self, input_shape) 219 self.inputs = [x] 220 for layer in self._layers: --> 221 x = layer(x) 222 self.outputs = [x] 223 self._build_input_shape = input_shape C:\python\anaconda\pgm\lib\site-packages\keras\engine\base_layer.py in __call__(self, inputs, **kwargs) 412 # Raise exceptions in case the input is not compatible 413 # with the input_spec specified in the layer constructor. --> 414 self.assert_input_compatibility(inputs) 415 416 # Collect input shapes to build layer. C:\python\anaconda\pgm\lib\site-packages\keras\engine\base_layer.py in assert_input_compatibility(self, inputs) 309 self.name + ': expected ndim=' + 310 str(spec.ndim) + ', found ndim=' + --> 311 str(K.ndim(x))) 312 if spec.max_ndim is not None: 313 ndim = K.ndim(x) ValueError: Input 0 is incompatible with layer conv2d_16: expected ndim=4, found ndim=2
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/06 07:09