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

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

新規登録して質問してみよう
ただいま回答率
85.48%
CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

Q&A

0回答

464閲覧

自作の学習済みモデルを用いて転移学習を行いたい

orionza

総合スコア1

CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

0グッド

0クリップ

投稿2021/07/13 03:08

編集2021/07/24 01:58

自分で実装したCNNでモデルを保存し、それを使って転移学習を行いたいと考えているのですが、
実装がうまくいかず、自分ひとりでは解決が難しいため、是非お力を貸していただきたいです。

はっきりさせておきたいと考えているのは以下の4つです。
1.(CNNコード)モデルの保存方法が正しいかどうか
2.(転移学習コード)モデルの読み込み方法が正しいかどうか
3.(転移学習コード)読み込んだモデルのtrainable属性はどのように設定するのが一般的か
4.(転移学習コード)事前学習モデルと後続のレイヤーは正しく結合できているか(サイズ等)

以下、CNNのモデル部分と転移学習のコードです。
いずれも、2つの数値を予測する回帰モデルで、入力は画像(+教師データ)です。

python

1#CNN 2 3input = Input(shape=(100,100,3)) 4conv_0 = Conv2D(32,kernel_size=3,activation='relu')(input) 5pool_0 = MaxPooling2D(pool_size=(2,2))(conv_0) 6pool_0 = Dropout(0.25)(pool_0) 7conv_1 = Conv2D(64,kernel_size=3,activation='relu')(pool_0) 8pool_1 = MaxPooling2D(pool_size=(2,2))(conv_1) 9pool_1 = Dropout(0.25)(pool_1) 10conv_2 = Conv2D(32,kernel_size=3,activation='relu')(pool_1) 11pool_2 = MaxPooling2D(pool_size=(2,2))(conv_2) 12pool_2 = Dropout(0.25)(pool_2) 13conv_3 = Conv2D(16,kernel_size=3,activation='relu')(pool_2) 14pool_3 = MaxPooling2D(pool_size=(2,2))(conv_3) 15conv_4 = Conv2D(8,kernel_size=3,activation='relu')(pool_3) 16pool_4 = MaxPooling2D(pool_size=(2,2))(conv_4) 17flat = Flatten()(pool_4) 18denseL = Dense(64,activation='relu')(flat) 19denseL = Dropout(0.25)(denseL) 20A_output = Dense(1,name="a")(denseL) 21B_output = Dense(1,name="b")(denseL) 22 23model = Model(inputs=input, outputs=[A_output,B_output]) 24model.compile(Adam(learning_rate=0.001), 25 loss = {'a':'mae','b':'mae'} , 26 metrics = {'a':'mae','b':'mae'}) 27 28history = model.fit([np.array(Img_train)],[np.array(LabelA_train),np.array(LabelB_train)], 29 epochs=100, batch_size=16, 30 validation_data=([np.array(Img_test)],[np.array(S_IBP_test),np.array(D_IBP_test)])) 31 32#モデルの保存 33model.save('forTransferL.h5') 34 35""" 36以下、sumally()の結果です 37__________________________________________________________________________________________________ 38Layer (type) Output Shape Param # Connected to 39================================================================================================== 40input_1 (InputLayer) [(None, 100, 100, 3) 0 41__________________________________________________________________________________________________ 42conv2d (Conv2D) (None, 98, 98, 32) 896 input_1[0][0] 43__________________________________________________________________________________________________ 44max_pooling2d (MaxPooling2D) (None, 49, 49, 32) 0 conv2d[0][0] 45__________________________________________________________________________________________________ 46dropout (Dropout) (None, 49, 49, 32) 0 max_pooling2d[0][0] 47__________________________________________________________________________________________________ 48conv2d_1 (Conv2D) (None, 47, 47, 64) 18496 dropout[0][0] 49__________________________________________________________________________________________________ 50max_pooling2d_1 (MaxPooling2D) (None, 23, 23, 64) 0 conv2d_1[0][0] 51__________________________________________________________________________________________________ 52dropout_1 (Dropout) (None, 23, 23, 64) 0 max_pooling2d_1[0][0] 53__________________________________________________________________________________________________ 54conv2d_2 (Conv2D) (None, 21, 21, 32) 18464 dropout_1[0][0] 55__________________________________________________________________________________________________ 56max_pooling2d_2 (MaxPooling2D) (None, 10, 10, 32) 0 conv2d_2[0][0] 57__________________________________________________________________________________________________ 58dropout_2 (Dropout) (None, 10, 10, 32) 0 max_pooling2d_2[0][0] 59__________________________________________________________________________________________________ 60conv2d_3 (Conv2D) (None, 8, 8, 16) 4624 dropout_2[0][0] 61__________________________________________________________________________________________________ 62max_pooling2d_3 (MaxPooling2D) (None, 4, 4, 16) 0 conv2d_3[0][0] 63__________________________________________________________________________________________________ 64conv2d_4 (Conv2D) (None, 2, 2, 8) 1160 max_pooling2d_3[0][0] 65__________________________________________________________________________________________________ 66max_pooling2d_4 (MaxPooling2D) (None, 1, 1, 8) 0 conv2d_4[0][0] 67__________________________________________________________________________________________________ 68flatten (Flatten) (None, 8) 0 max_pooling2d_4[0][0] 69__________________________________________________________________________________________________ 70dense (Dense) (None, 64) 576 flatten[0][0] 71__________________________________________________________________________________________________ 72dropout_3 (Dropout) (None, 64) 0 dense[0][0] 73__________________________________________________________________________________________________ 74a (Dense) (None, 1) 65 dropout_3[0][0] 75__________________________________________________________________________________________________ 76b (Dense) (None, 1) 65 dropout_3[0][0] 77========================================================================================="""

python

1#転移学習 2 3model = load_model('forTransferL.h5') 4model.layers[0].trainable = False 5x = model.layers[10].output 6 7#以下はCNNのモデルの一部と同じものです。 8conv_3 = Conv2D(16,kernel_size=3,activation='relu')(x) 9pool_3 = MaxPooling2D(pool_size=(2,2))(conv_3) 10conv_4 = Conv2D(8,kernel_size=3,activation='relu')(pool_3) 11pool_4 = MaxPooling2D(pool_size=(2,2))(conv_4) 12flat = Flatten()(pool_4) 13denseL = Dense(64,activation='relu')(flat) 14denseL = Dropout(0.25)(denseL) 15A_output = Dense(1,name="a")(denseL) 16B_output = Dense(1,name="b")(denseL) 17 18model=Model(inputs=model.input,outputs=[A_output,B_output])

念の為、今出ているエラー文も以下に記載しておきますが、
対処療法的なエラー修正というより、基本的な実装部分を見直す方が優先度は高いかなと考えています。

上記、よろしくお願いいたします。
質問の補足依頼等も歓迎いたします。

#以下エラー文(一部) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "c:/Users/userABC/OneDrive/ドキュメント/StudyAI/transferMymodel.py", line 158, in <module> pool_m4 = MaxPooling2D(pool_size=(2,2))(conv_m4) File "C:\Users\userABC\anaconda3\lib\site-packages\keras\engine\base_layer.py", line 1006, in __call__ outputs = call_fn(inputs, *args, **kwargs) 〜文字数の都合で省略〜 ValueError: Negative dimension size caused by subtracting 2 from 1 for '{{node tf.compat.v1.nn.max_pool_1/MaxPool}} = MaxPool[T=DT_FLOAT, data_format="NHWC", explicit_paddings=[], ksize=[1, 2, 2, 1], padding="VALID", strides=[1, 2, 2, 1]](Placeholder)' with input shapes: [?,1,1,8].

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問