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

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

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

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

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

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

Python

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

Q&A

解決済

1回答

2501閲覧

Tensorflowでレイヤーごとに学習率を変更する方法

neko_dono

総合スコア1

Keras

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

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

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

Python

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

0グッド

0クリップ

投稿2021/04/16 08:36

編集2021/04/16 10:46

前提・実現したいこと

Tensorflowでレイヤーごとに学習率を変更したいです。
通常だと、学習率を設定したら全てのレイヤーに適応されると思いますが、これを各層ごとに設定する方法はありますでしょうか?
(提案論文で学習率を層ごとに設定しており、自分で記述する場合でも設定したいです。)

該当のソースコード

コードは必要そうな部分のみを抽出しています。

python

1def ESPCN(mag): 2 input_shape = Input((None, None, 1)) 3 4 conv2d_0 = Conv2D(filters = 64, 5 kernel_size = (5, 5), 6 padding = "same", 7 activation = "relu", 8 )(input_shape) 9 conv2d_1 = Conv2D(filters = 32, 10 kernel_size = (3, 3), 11 padding = "same", 12 activation = "relu", 13 )(conv2d_0) 14 conv2d_2 = Conv2D(filters = mag ** 2, 15 kernel_size = (3, 3), 16 padding = "same", 17 )(conv2d_1) 18 19 model = Model(inputs = input_shape, outputs = [conv2d_2]) 20 21 model.summary() 22 23 return model 24model = model.ESPCN() 25opt = tf.keras.optimizers.Adam(learning_rate=0.0001) 26model.compile(loss = "mean_squared_error", 27 optimizer = opt, 28 metrics = [psnr]) 29model.fit(train_x, 30 train_y, 31 epochs = 10000)

これで実行すると、全てのレイヤーに学習率0.0001が適応されますが、
conv2d_0, conv2d_1に学習率0.0001を、conv2d_2に学習率0.00001を適応させたいです。

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

tensorflow 2.0以降です。
よろしくお願いします。

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

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

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

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

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

toast-uz

2021/04/16 10:45 編集

> conv2d_0, conv2d_1に学習率0.0001を、conv2d_2に学習率0.00001を適応させたい 目的は何でしょうか? 層ごとに学習率を変えたい→層ごとのウエイト変更幅を変えたい→層ごとの学習において学習データの重みを(不均衡なので)修正したい→BN層とか入れれば解決?かと思いました。
neko_dono

2021/04/16 10:44

学習率はあくまで例として設定しただけなので、実際には任意の値を与えれるようにしたいです。 学習率を変更する理由として、提案手法の論文で学習率を層ごとで別々の値を設定しているからです。(追記しておきます、ありがとうございます。)
toast-uz

2021/04/16 10:48

その論文は、実装を何でやっているのでしょうか?
neko_dono

2021/04/16 10:49

超解像という、画像の解像度を上げる実験をしています。 超解像の分野の論文をみますと、多くの論文が層ごとに学習率を分けて設定しており、質問させてもらいました。
toast-uz

2021/04/16 11:42

すみません。分かりにくい言い方でした。 機械学習の論文は実際に動作を立証するコードを公開していることが多いので、その論文がどのようなフレームワークで実装されているか分かればヒントになると思いました。
neko_dono

2021/04/16 11:43

なるほど... 論文ではmatlabやCaffeなどのTensorflow以外のものでしか実装されていなくてこちらで質問させていただいてます。
guest

回答1

0

ベストアンサー

提案手法の論文で学習率を層ごとで別々の値を設定しているから

超解像の分野の論文をみますと、多くの論文が層ごとに学習率を分けて設定

勝手な想像ですが、超解像をするときにこちらのサイトにあるように、入り口側に近いところでは汎用的なエッジ検出のようなあまり変えたくない情報が、お尻側ではもっと汎用的に課題ごとに変わってほしい内容が収まるからと理解しました。

解決策としては、
使ったことはありませんがKeras LR Multiplierというのがあります。

私が自力で実装するなら、賢いやり方ではないかもしれませんが、都度対象となるレイヤー以外を.trainable = Falseにして学習でしょうか。こんなやり方は時間がかかってしょうがないですね!

追補

上記のpipyのものだと、kerasと統合前のTensorflow用の仕様ようで、最新のKerasと統合されたTensorflow2.x系だとダメかもしれません。

ですのでさらに調べたところ、最新のTensorflow2.xに対応しているものは、tfa.optimizers.MultiOptimizerだと分かりました。具体的な使い方は、Usageのあたりに、Adamの学習率をレイヤーごとに変えている例があります。

toast-uzさんのコメントにありますが、Torchの方がこういうかゆいところに手が届くのは早そうな気もします。

投稿2021/04/17 07:08

編集2021/04/17 09:29
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

toast-uz

2021/04/17 08:01

確かにMATLABだと、学習率係数、というのがあって、層ごとに学習率を変えられるようですね。 PyTorchだと公式の範囲でできるらしいですので、この機会にPyTorchを学んでみるのも良いかもです。 https://www.noconote.work/entry/2019/01/16/000000
neko_dono

2021/04/17 12:20

Pytochもいつかは手を出してみるべきかもですね... お二方本当にありがとうございました!! tfa使って一度実装してみます!できなかった場合は大人しくPytochとか使わせていただきます...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問