###前提・実現したいこと
Kerasを用いて6人のアニメキャラの顔を識別しようとしています。
簡単な学習させるためのネットワークはできたのですが、#でコメントアウトしてある層を追加しようとするとエラーが出て学習が開始出来ません。入力している配列はこんな感じです。
###発生している問題・エラーメッセージ
ValueError: Filter must not be larger than the input: (3, 3) Input: (2, 16)
###該当のソースコード
import numpy as np np.random.seed(20160715) # シード値を固定 from keras.layers.convolutional import Convolution2D from keras.layers.convolutional import MaxPooling2D from keras.layers.core import Activation from keras.layers.core import Dense, Dropout, Flatten from keras.models import Sequential from keras.callbacks import EarlyStopping from keras.callbacks import LearningRateScheduler from keras.optimizers import Adam from keras.optimizers import SGD import sklearn.cross_validation from keras.utils.visualize_util import plot nb_classes = 6 img_rows, img_cols = 32, 32 X_test=np.load('anime_data.npy') Y_target=np.load('anime_target.npy') a_train, a_test, b_train, b_test = sklearn.cross_validation.train_test_split(X_test,Y_target) model = Sequential() model.add(Convolution2D(32, 3, 3, border_mode='same', input_shape=(3, img_rows, img_cols))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2), border_mode='same')) #model.add(Convolution2D(32, 3, 3, border_mode='same')) #model.add(Activation('relu')) #model.add(MaxPooling2D(pool_size=(2, 2), border_mode='same')) #model.add(Dropout(0.5)) model.add(Flatten()) model.add(Dense(256)) model.add(Activation('relu')) model.add(Dropout(0.5)) model.add(Dense(nb_classes)) model.add(Activation('softmax')) init_learning_rate = 1e-2 opt = SGD(lr=init_learning_rate, decay=0.0, momentum=0.9, nesterov=False) model.compile(loss='sparse_categorical_crossentropy', optimizer=opt, metrics=["acc"]) early_stopping = EarlyStopping(monitor='val_loss', patience=3, verbose=0, mode='auto') lrs = LearningRateScheduler(0.01) hist = model.fit(a_train,b_train, batch_size=128, nb_epoch=1, validation_split=0.1, verbose=1) model_json_str = model.to_json() open('anime_model.json', 'w').write(model_json_str) model.save_weights('anime_model.h5') score=model.evaluate(a_test, b_test, verbose=0) print(score[1]) plot(model, to_file='model.png', show_shapes=True)
###試したこと
正常動作しているときの層を通過後のoutputとinputを画像として出力してみたところ下の画像のようになっていました。ここでプーリング層の後は画像の縦横のサイズが半分になると思ってるのですが、ここでは片側しか半分になってなく、関係ないところが3から2にかわっています。これはプログラムの書き方が悪いのかと思ったのですが自分には間違いがわかりませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
python 3.5.2
Keras 1.1.0
numpy 1.11.2
h5py 2.6.0
scikit-learn 0.18
あなたの回答
tips
プレビュー