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

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

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

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

Python 3.x

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

Q&A

0回答

3193閲覧

TensorflowでResNetの実装を試していますが、学習がすすみません。

open_your_eyes

総合スコア4

深層学習

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

Python 3.x

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

0グッド

0クリップ

投稿2019/09/01 09:50

編集2019/09/01 09:54

TensorflowでResNetを実装したく、トライしています。
Kerasで動作実績のあるコードをもとに書きかえてみたのですが
上手くいっておりません。

・生じている問題
テストデータに対する損失関数(Loss)が減少しません
(少数点4桁くらい表示していますが、まったく変化せず)。
計算グラフがうまくできておらず、誤差逆伝播ができていないのかと推察しています。

以下、インデントが上手くされておらず、読みにくいコードになっておりすみません。

def _shortcut(inputs, residual)
n_filters = residual.shape[3]
print('n_filters=',n_filters)
shortcut = tf.layers.Conv2D(n_filters, kernel_size=[1, 1], strides=[1, 1], padding='VALID')(inputs)
return tf.keras.layers.add([shortcut, residual])

initializer = tf.initializers.he_normal()
def _resblock(n_filters, strides=(1,1)):
def f(input):
x = tf.layers.Conv2D(n_filters, kernel_size = [3, 3], strides=strides, kernel_initializer=initializer, padding='SAME')(input)
x = tf.layers.BatchNormalization()(x, training=is_training)
x = tf.nn.relu(x)
x = tf.layers.Conv2D(n_filters, kernel_size = [3, 3], strides=strides, kernel_initializer=initializer, padding='SAME')(x)
x = tf.layers.BatchNormalization()(x, training=is_training)

return _shortcut(input, x) return f

tf.reset_default_graph()
is_training = tf.placeholder(tf.bool, shape=())

x = tf.placeholder(tf.float32, [None, 32, 32, 3]) #入力データ
t = tf.placeholder(tf.float32, [None, 10]) #正解ラベル

h = tf.layers.Conv2D(filters=32, kernel_size=[7, 7], strides=[1, 1], kernel_initializer=initializer, padding='SAME')(x)
h = tf.layers.BatchNormalization()(h, training=is_training)
h = tf.nn.relu(h)
h = tf.layers.MaxPooling2D(pool_size=[2, 2], strides=2)(h)

h = _resblock(n_filters=64)(h)
h = _resblock(n_filters=64)(h)
h = _resblock(n_filters=64)(h)
h = tf.layers.MaxPooling2D(pool_size=[2, 2], strides=2)(h)

h = _resblock(n_filters=128)(h)
h = _resblock(n_filters=128)(h)
h = _resblock(n_filters=128)(h)
h = tf.layers.MaxPooling2D(pool_size=[2, 2], strides=2)(h)

h = _resblock(n_filters=256)(h)
h = _resblock(n_filters=256)(h)
h = _resblock(n_filters=256)(h)

h = tf.keras.layers.GlobalAveragePooling2D()(h)

h = tf.layers.Dense(units=128, activation=tf.nn.relu)(h)
y = tf.layers.Dense(units=10, activation=tf.nn.softmax)(h)

cost = - tf.reduce_mean(tf.reduce_sum(t * tf_log(y), axis=1))
update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)

with tf.control_dependencies(update_ops):
optimizer = tf.train.AdamOptimizer(0.01).minimize(cost)

Tensorflow自体に不慣れであり、基本的なミスなのかもしれませんが、
どうぞよろしくお願いいたします。

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

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

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

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

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

Q71

2019/09/01 11:24 編集

「インデントが上手くされておらず、読みにくいコードになっており」と思うなら、編集してください。 (バッククォーテーション3つの行で、コード全体を挟んで下さい。) 「Kerasで動作実績のあるコードをもとに書きかえ」たということですが、書き換える前のコードは動作したのでしょうか。また、Python や TensorFlow のバージョン番号も追記してください。 私が主に使っているのは Chainer なので、TensorFlow は詳しくないのですが、TensorBoard とかいう、学習過程を可視化するツールがあるのではないでしょうか。それで計算グラフがでないでしょうか。その計算グラフと、自分が思っているグラフが一致しているでしょうか。
tiitoi

2019/09/01 14:54 編集

回答ではありませんが、tf.layers や tf.train モジュールは deprecated となっており、今度リリースされる TensorFlow 2.0 で削除されるので、今から古い書き方で作成しなくてもよいのではないでしょうか。 Keras は TensorFlow に統合されているので、import してる部分に tensorflow を追加するだけで、Keras のコードはそのまま動作します。 例: from keras.layers import Dense → from tensorflow.keras.layers import Dense
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問