質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

kerasによる最終層の出力の設定

sayaka1202
sayaka1202

総合スコア0

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0評価

0クリップ

22146閲覧

投稿2017/09/25 10:30

編集2022/01/12 10:58

###問題点

kerasによる画像認識を拝見し,Inception v3のfine tuning(4クラス分類)をやりたいと思っています.
しかし,最終層の設定において出力を4つに設定し,モデルのサマリを見ても

dense_1 (Dense) (None, 4) 8196 global_average_pooling2d_1[0][0]

となっているにも関わらず,以下のエラーが出ます

ValueError: Error when checking target: expected dense_1 to have shape (None, 1) but got array with shape (32, 4)

何が原因かが未だ分からないので助言をお願いしたいと思います.
以下ソースコードです.
###該当のソースコード

Python

import os from keras.applications.inception_v3 import InceptionV3 from keras.applications.inception_v3 import preprocess_input from keras.models import Sequential, Model from keras.layers import Dense, Dropout, Activation, Flatten from keras.layers import Convolution2D, MaxPooling2D, ZeroPadding2D, GlobalAveragePooling2D, AveragePooling2D from keras.regularizers import l2 from keras.utils import np_utils from keras.utils import plot_model from keras.preprocessing.image import ImageDataGenerator from keras.callbacks import ModelCheckpoint import matplotlib.pyplot as plt import keras.backend as K epoch = 2 result_dir = 'D:/result_cate' if not os.path.exists(result_dir): os.mkdir(result_dir) def plot_history(history): # 精度の履歴をプロット plt.plot(history.history['acc'], "o-", label="accuracy") plt.plot(history.history['val_acc'], "o-", label="val_acc") plt.title('model accuracy') plt.xlabel('epoch') plt.ylabel('accuracy') plt.legend(loc="lower right") plt.show() # 損失の履歴をプロット plt.plot(history.history['loss'], "o-", label="loss", ) plt.plot(history.history['val_loss'], "o-", label="val_loss") plt.title('model loss') plt.xlabel('epoch') plt.ylabel('loss') plt.legend(loc='lower right') plt.show() def save_history(history, result_file): loss = history.history['loss'] acc = history.history['acc'] val_loss = history.history['val_loss'] val_acc = history.history['val_acc'] nb_epoch = len(acc) with open(result_file, "w") as fp: fp.write("epoch\tloss\tacc\tval_loss\tval_acc\n") for i in range(nb_epoch): fp.write("%d\t%f\t%f\t%f\t%f\n" % (i, loss[i], acc[i], val_loss[i], val_acc[i])) if __name__ == '__main__': classes = ['kojima', 'nomura', 'ogata', 'okamoto'] batch_size = 32 nb_classes = len(classes) img_rows, img_cols = 299, 299 samples_per_epoch = 600 nb_val_samples = 99 # CNNを構築 # Inception v3モデルの読み込み,最終層は読み込まない base_model = InceptionV3(weights='imagenet', include_top=False) # 最終層の設定 x = base_model.output x = GlobalAveragePooling2D()(x) predictions = Dense(nb_classes, kernel_initializer="glorot_uniform", activation="softmax", kernel_regularizer=l2(.0005))(x) # モデルのサマリを表示 model = Model(inputs=base_model.input, outputs=predictions) plot_model(model, show_shapes=True, to_file=os.path.join(result_dir, 'model.png')) model.summary() # base_modelはweightsを更新しない for layer in base_model.layers: layer.trainable = False model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) # ディレクトリの画像を使ったジェネレータ train_datagen = ImageDataGenerator( rescale=1.0 // 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True) test_datagen = ImageDataGenerator(rescale=1.0 // 255) train_generator = train_datagen.flow_from_directory( directory='D:/spec_dir/train_images', target_size=(img_rows, img_cols), color_mode='rgb', classes=classes, class_mode='categorical', batch_size=batch_size, shuffle=True) # 確認 print(train_generator.class_indices) test_generator = test_datagen.flow_from_directory( directory='D:/spec_dir/test_images', target_size=(img_rows, img_cols), color_mode='rgb', classes=classes, class_mode='categorical', batch_size=batch_size, shuffle=True) checkpointer = ModelCheckpoint(filepath='D:/result/model.{epoch:02d}-{val_loss:.2f}.hdf5', verbose=1, save_best_only=True) history = model.fit_generator( train_generator, steps_per_epoch=samples_per_epoch, epochs=epoch, validation_data=test_generator, validation_steps=nb_val_samples, callbacks=[checkpointer]) save_history(history, os.path.join(result_dir, 'history.txt')) # modelに学習させた時の変化の様子をplot plot_history(history) loss, acc = model.evaluate_generator(test_generator, steps=400) print('Test loss:', loss) print('Test acc:', acc) K.clear_session()

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。