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

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

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

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

Q&A

解決済

1回答

1336閲覧

学習回数ごとに結果の出力をしたい

yone_yone

総合スコア28

Python

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

0グッド

0クリップ

投稿2018/08/03 09:45

編集2018/08/03 09:47

簡単なニューラルネットワークを使って、学習回数ごとに学習データとテストデータの誤差の出力をしたいと考えています。
使っているコードは以下のようになります。

python

1# -*- coding: utf-8 -*- 2#@test {"output": "ignore"} 3training_steps = 25000 4for seed in range(1,11): #seedを1~10まで繰り返す 5 losses = [] 6 7 with tf.Session() as sess: 8 # Set up all the tensors, variables, and operations. 9 input = tf.constant(bias_with_x) 10 target = tf.constant(np.transpose([y_train]).astype(np.float32)) 11 12 #[ここは重みと閾値の初期化の部分のため省略] 13 14 tf.global_variables_initializer().run() 15 16 y1 = tf.nn.relu(tf.matmul(input, weights)) 17 y2 = tf.nn.relu(tf.matmul(y1, weights1)) 18 yhat = tf.sigmoid(tf.matmul(y2, weights2)) 19 yerror = tf.subtract(yhat, target) 20 loss1 = tf.nn.l2_loss(yerror) 21 L2_sqr = tf.nn.l2_loss(weights) + tf.nn.l2_loss(weights1) + tf.nn.l2_loss(weights2) 22 loss = loss1 + lambda_2 * L2_sqr 23 24 input_test = tf.constant(bias_with_x_test) 25 target_test = tf.constant(np.transpose([y_test]).astype(np.float32)) 26 y1_test = tf.nn.relu(tf.matmul(input_test, weights)) 27 y2_test = tf.nn.relu(tf.matmul(y1_test, weights1)) 28 yhat_test = tf.sigmoid(tf.matmul(y2_test, weights2)) 29 30 update_weights = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss) 31 32 for i in range(training_steps): 33 update_weights.run() 34 losses.append(loss.eval()) 35 # Training is done, get the final values for the graphs 36 betas = weights.eval() 37 yhat = yhat.eval() 38 error = np.sqrt(((y_train-yhat)*(y_train-yhat)).mean()) #RMSEの算出 39 40 size = len(y_train) 41 MAE = (np.sum(np.abs(y_train-yhat)))/size 42 43 yhat_test = yhat_test.eval() 44 size = len(y_test) 45 MAE_test = (np.sum(np.abs(y_test-yhat_test)))/size 46 47 global MAE_train_ave 48 MAE_train_ave += MAE 49 50 global MAE_test_ave 51 MAE_test_ave += MAE_test 52 53Train = MAE_train_ave/10.0 54Test = MAE_test_ave/10.0 55print('学習誤差 : %s' % Train) 56print('テスト誤差 : %s' % Test)

この処理の流れだと、最後に更新した学習回数(training_steps)のみの出力となっていしまいます。5000回ごとに出力させたいので、そのような処理のコードを入れたら良いのは分かるのですが、自分の理解不足で差し込んでも上手く処理ができていない状態にあります。

どの部分にどのようなコードを差しこめばよいか回答いただけるとありがたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

for i in range(training_steps):
があるので、そのインデントの中で出力すればよいのでは?


ちなみに、tensorflowを使わないと卒業できないんだ!お仕事のお金がもらえないんだ!じゃなければ、kerasを使った方がいいです。

fitメソッドのverboseを1にするだけで出力されます。

今回の質問はかなり基礎的なことなので、これが自力でできないのであれば、tensorflowのような低級のライブラリを使用するのは苦しみを生み出すだけです。

投稿2018/08/03 10:00

mkgrei

総合スコア8560

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

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

yone_yone

2018/08/03 10:19

回答ありがとうございます。 やはりそインデントの中で出力させますよね。。。 kerasのことは知っていたのですが私の食わず嫌いなところがあり、手を付けていない状態でした。 今後はkerasの方も使ってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問