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

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

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

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

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

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

Q&A

解決済

1回答

777閲覧

Unetのエラーを解決したい

退会済みユーザー

退会済みユーザー

総合スコア0

Keras

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

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

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

0グッド

0クリップ

投稿2022/10/24 15:18

編集2022/10/26 06:12

前提

Google colabでUnetを行い、ロスを下げるためにデータセットを見直しました。
しかし、新しくエラーが出るようになりました。
train_step(image,alpha) ←この部分でエラーが出ています。

Input 0 of layer "model" is incompatible with the layer: expected shape=(None, 128, 128, 3), found shape=(50, 128, 128, 4)
これは何を指しているのでしょうか?またどのように変更すれば良いのでしょうか?

実現したいこと

Unetのエラーを解決したい

エラー文

ValueError: in user code:

File "<ipython-input-4-78d0837b4be5>", line 112, in train_step * predictions = model(image) File "/usr/local/lib/python3.7/dist-packages/keras/utils/traceback_utils.py", line 67, in error_handler ** raise e.with_traceback(filtered_tb) from None File "/usr/local/lib/python3.7/dist-packages/keras/engine/input_spec.py", line 264, in assert_input_compatibility raise ValueError(f'Input {input_index} of layer "{layer_name}" is ' ValueError: Input 0 of layer "model" is incompatible with the layer: expected shape=(None, 128, 128, 3), found shape=(50, 128, 128, 4)

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

jbpb0

2022/10/25 06:01

「tf.keras.optimizers.Adam()」の「lr=0.001」を大きくしてみるとか その場合は、可能ならば、メモリーエラーが出るギリギリまでバッチサイズも大きくする方がいいです https://qiita.com/koshian2/items/8d8f0197aab1779e096b
退会済みユーザー

退会済みユーザー

2022/10/25 07:23

ご回答ありがとうございます。試してみます。
jbpb0

2022/10/25 08:12

いろんなことをいっぺんにやると、何がどう効いたのかが分からなくなるので、一つずつ変えながら効果を確認していった方がいいですよ
退会済みユーザー

退会済みユーザー

2022/10/26 04:59

ありがとうございます。 最終的にどうやらデータセットに問題があったみたいでした。 そこで、データセットを変更したところ、新たにエラーが出るようになってしまったのでそのエラーも見てもらえるとありがたいです。
jbpb0

2022/10/26 05:37

> ValueError: Input 0 of layer "model" is incompatible with the layer: expected shape=(None, 128, 128, 3), found shape=(50, 128, 128, 4) 使ってる画像に、RGBではなくてRGBAのが混ざってたりしませんか?
退会済みユーザー

退会済みユーザー

2022/10/26 05:52

データセットを作るときにconvert('RGB')を指定したのですが、もしかすると上手くいていなかったかもしれません。 #データセットの読み込み Combine = np.load("...\\Combined_image.npy",allow_pickle=True)#13500枚 Trimap = np.load("...y\\Trimap_image.npy",allow_pickle=True) GT = np.load("...\\GT_image.npy",allow_pickle=True) このようにデータセットのnpyファイルを読み込んでいるのですが、このコード内でRGBに変換して使用することは可能なのでしょうか?
退会済みユーザー

退会済みユーザー

2022/10/26 05:58 編集

print(Combine.shape)>>>(13500, 128, 128, 3) print(Trimap.shape)>>>(13500, 128, 128, 1) print(GT.shape)>>>(13500, 128, 128, 1) print(DS.shape)>>>(13500, 128, 128, 4)#Combine+Trimapが入っています。
guest

回答1

0

ベストアンサー

Keras - Conv2D layer

与えることのできるパラメータにカーネルの初期値に関するkernel_initializerというものがあります.最初はglorot_uniformに設定されていますが,これは活性化関数をtanhにしたとき用のものです.

パラメータにkenel_initializer = 'he_uniform'を設定して,活性化関数をreluにしたとき用の初期値に変更すると良いでしょう.

Kaiming He氏の論文
Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification
を読まれるとわかりますが,学習速度の向上に繋がります.

あとはBatchNormalization()を入れることです.活性化関数を通した直後に挿入されるのが一般的ですが,U-NetではKeras実装を見ても分かる通り,活性化関数前に挿入されるような実装になっています.

学習速度向上にはこの2つのアプローチが不足しているかと.

投稿2022/10/25 04:13

PondVillege

総合スコア1579

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

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

退会済みユーザー

退会済みユーザー

2022/10/25 06:19

ご回答ありがとうございます。 論文まで載せていただき、非常に勉強になりました。 勉強不足で申し訳ないのですが、具体的にどの部分をどのように書き換えれば良いのでしょうか?
PondVillege

2022/10/25 06:24

例えばエンコーダの序盤 conv1 = Conv2D(64, (3, 3) , activation = 'relu', padding = 'same')(x) を conv1 = Conv2D(64, (3, 3) , padding = 'same', kenel_initializer = 'he_uniform')(x) にした上で,その直下に conv1 = BatchNormalization()(conv1) conv1 = Activation('relu')(conv1) と書く.ですかね.BNは活性化関数前に挿入しなければならないので,Conv2Dからは削除してBNの次に書く形になると思います. これを全部の畳み込み/逆畳み込みレイヤに適用させれば良いでしょう.今までConv2D単体だったものを,Conv2D+BN+Activationの形式にしてください.
退会済みユーザー

退会済みユーザー

2022/10/25 06:46

ありがとうございます。さっそく試してみます。
退会済みユーザー

退会済みユーザー

2022/10/26 04:59

ありがとうございます。 最終的にどうやらデータセットに問題があったみたいでした。 そこで、データセットを変更したところ、新たにエラーが出るようになってしまったのでそのエラーも見てもらえるとありがたいです。
PondVillege

2022/10/26 05:39

データセットの画像がRGBではなくRGBA形式だった.ということです.このままAlphaチャンネルも使って学習して良いのなら, def unet(size=(128,128,3)):#画像サイズ のところを def unet(size=(128,128,4)):#画像サイズ にすると良いでしょう.
退会済みユーザー

退会済みユーザー

2022/10/26 06:10

ありがとうございました。無事に動き始めました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問