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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1651閲覧

マルチラベル学習後にデータを追加する方法

sakura_hana

総合スコア11425

Keras

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/03/11 09:35

編集2019/03/12 00:54

画像認識を行わせる為、Kerasによるマルチラベル学習を行っています。
現在「VGG16を使った学習→モデルの保存→保存したモデルを使った判定」まで成功しています。
この後、判定可能な画像を増やしたいと思っています。

1回目の学習:画像1〜10、ラベル10種類
2回目の学習:画像11〜20、(追加の)ラベル10種類
3回目の学習:画像21〜40、(追加の)ラベル20種類
→最終結果:画像1〜40、ラベル40種
という形になるのが希望です(実際はラベルは3つありますが一旦省略)。

load_modelを使用した再学習を試してみたのですが、最後に学習したデータしか正しく判定出来ません。
(上記例で言う1回目の学習後は「画像1=0番目の画像」「画像2=1番目の画像」と的中(=ほぼ1に近い確率)していますが、
2回目の学習後は「画像11=0番目の画像」「画像12=1番目の画像」「画像1=(的中無し)」となります。
学習内容が混ざっているのかと思いましたが、その割には2回目の方は高精度で的中させているのがよく分かりません)

また、ラベルの種類数が違う(上記例で言う3回目の学習)だと以下のエラーが出て学習が出来ません。
ValueError: Error when checking target: expected output1 to have shape (10,) but got array with shape (20,)

このような学習は出来ないのでしょうか?
機械学習については初心者の為、低レベルな質問かもしれませんがアドバイスを頂けると幸いです。
(以下が現状のコードとなります)

Python

1# 最初の学習 2xtrainInput = Input(shape=(x_train.shape[1:])) 3use_model = VGG16(include_top=False, weights='imagenet', input_shape=(x_train.shape[1:])) 4for layer in use_model.layers[:-4]: 5 layer.trainable = False 6 7x = use_model(xtrainInput) 8x = Flatten()(x) 9x = Dense(512, activation='relu')(x) 10x = Dropout(0.5)(x) 11 12# 以下がラベル数が違う場合のエラーの原因だと思うが、どう直せばいいか分からない 13output1 = Dense(10, activation='softmax')(x) 14output2 = Dense(10, activation='softmax')(x) 15output3 = Dense(10, activation='softmax')(x) 16 17model = Model(x_train, [output1, output2, output3]) 18 19model.compile(loss={'output1': 'categorical_crossentropy', 20 'output2': 'categorical_crossentropy', 21 'output3': 'categorical_crossentropy'}, 22 optimizer=opt, 23 metrics=['accuracy']) 24 25 26# 2回目以降の学習時はこちらを使用 27# model = load_model('model.h5') 28 29 30# 学習実行 31history = model.fit(x_train, 32 {'output1': y_train1, 33 'output2': y_train2, 34 'output3': y_train3}) #他パラメータ省略

*ユースケース
「定期的に増えていく商品を順次読み取り可能にしたい」というのが大目的になります。
追加された分だけ学習出来れば学習の時間短縮や負荷軽減になるのではと思い質問した次第です。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

学習が済んでいる状態で、分類数を増やすことはできません。学習をやり直してください。
あるいは、CNN層は固定して、denseの層だけ1から学習し直しです。

CNN層で特徴を抽出して、全結合層で分類します。分類を追加するのは全結合層の変更になります。
経験的に「追加データだけで追加学習する」のは、うまくいきません。

もし、ユースケースから説明していただけるなら、回避策を提案できる(人がいる)かもしれません。

投稿2019/03/11 09:56

Q71

総合スコア995

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakura_hana

2019/03/27 02:38

回答ありがとうございます。 前提条件から考え直してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問