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

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

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

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

Python 3.x

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

機械学習

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

Python

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

Q&A

解決済

1回答

2065閲覧

cifar-10 各クラスごとの正解率を出力させる方法

sinugo

総合スコア5

深層学習

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

Python 3.x

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

機械学習

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

Python

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

0グッド

0クリップ

投稿2019/11/20 15:11

編集2019/11/28 06:36

各クラスごとの正解率を出力させ方を教えてください。

今大学でtensorflowを使った雲画像の自動認識を勉強しています。
3クラス用意して学習しているのですが、
評価時に出力される正解率は全体のもののみなので、
クラスごとの正解率をそれぞれ出力したいと考えています。

*現在の出力
epoch ●● duration = ●● sec, prediction = ●●

*実現したい出力
epoch ●● class : 0 duration = ●● sec, prediction = ●●
epoch ●● class : 1 duration = ●● sec, prediction = ●●
epoch ●● class : 2 duration = ●● sec, prediction = ●●

該当のソースコード

python3

1train.py 2 3# coding: UTF-8 4from __future__ import absolute_import 5from __future__ import division 6from __future__ import print_function 7 8import os 9import time 10 11import numpy as np 12import tensorflow.compat.v1 as tf 13tf.disable_v2_behavior() 14 15import model as model 16from reader import Cifar10Reader 17 18from tensorflow.python.framework import graph_util 19from tensorflow.python.platform import gfile 20 21 22FLAGS = tf.app.flags.FLAGS 23tf.app.flags.DEFINE_integer('epoch', , "訓練するEpoch数") 24tf.app.flags.DEFINE_float('learning_rate', , "学習率") 25tf.app.flags.DEFINE_string('data_dir', './data/ ', "訓練データのディレクトリ") 26tf.app.flags.DEFINE_string('checkpoint_dir', './checkpoints/', 27 "チェックポイントを保存するディレクトリ") 28tf.app.flags.DEFINE_string('test_data', './data/test.bin', "テストデータのパス") 29tf.app.flags.DEFINE_string('graph_dir', './graphs/', 30 "グラフを保存するディレクトリ") 31 32 33def _loss(logits, label): 34 labels = tf.cast(label, tf.int64) 35 cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits( 36 logits=logits, labels=labels, name='cross_entropy_per_example') 37 cross_entropy_mean = tf.reduce_mean(cross_entropy, name='cross_entropy') 38 return cross_entropy_mean 39 40 41def _train(total_loss, global_step): 42 opt = tf.train.GradientDescentOptimizer(learning_rate=FLAGS.learning_rate) 43 grads = opt.compute_gradients(total_loss) 44 train_op = opt.apply_gradients(grads, global_step=global_step) 45 return train_op 46 47filenames = [ 48 os.path.join(FLAGS.data_dir, 'data_i.bin' % i) for i in range(0, 3) 49 ] 50 51 52def main(argv=None): 53 global_step = tf.Variable(0, trainable=False) 54 55 train_placeholder = tf.placeholder(tf.float32, 56 shape=[32, 32, 3], name='input_image') 57 label_placeholder = tf.placeholder(tf.int32, shape=[1], name='label') 58 59 # (height, width, depth) -> (batch, height, width, depth) 60 image_node = tf.expand_dims(train_placeholder, 0) 61 62 logits = model.inference(image_node) 63 total_loss = _loss(logits, label_placeholder) 64 train_op = _train(total_loss, global_step) 65 66 top_k_op = tf.nn.in_top_k(logits, label_placeholder, 1) 67 68 saver = tf.train.Saver(tf.global_variables()) 69 70 with tf.Session() as sess: 71 sess.run(tf.global_variables_initializer()) 72 tf.summary.FileWriter(sess.graph) 73 74 total_duration = 0 75 76 77 _export_graph(sess, 0) 78 79 for epoch in range(1, FLAGS.epoch + 1): 80 start_time = time.time() 81 82 for file_index in range(3): 83 print('Epoch %d: %s' % (epoch, filenames[file_index])) 84 reader = Cifar10Reader(filenames[file_index]) 85 86 for index in range(30000): 87 image = reader.read(index) 88 89 _, loss_value = sess.run([train_op, total_loss], 90 feed_dict={ 91 train_placeholder: image.byte_array, 92 }) 93 94 assert not np.isnan(loss_value), 'Model diverged with loss = NaN' 95 96 reader.close() 97 98 duration = time.time() - start_time 99 total_duration += duration 100 101 prediction = _eval(sess, top_k_op, 102 train_placeholder, label_placeholder) 103 print('epoch %d duration = %d sec, prediction = %.3f' 104 % (epoch, duration, prediction)) 105 106 saver.save(sess, FLAGS.checkpoint_dir, global_step=epoch) 107 _export_graph(sess, epoch) 108 109 print('Total duration = %d sec' % total_duration) 110 111 112def _eval(sess, top_k_op, input_image, label_placeholder): 113 if not FLAGS.test_data: 114 return np.nan 115 116 image_reader = Cifar10Reader(FLAGS.test_data) 117 true_count = 0 118 for index in range(30000): 119 image = image_reader.read(index) 120 121 predictions = sess.run([top_k_op], 122 feed_dict={ 123 input_image: image.byte_array, 124 label_placeholder: image.label 125 }) 126 true_count += np.sum(predictions) 127 image_reader.close() 128 129 return (true_count / 30000.0) 130 131 132def _restore(saver, sess): 133 checkpoint = tf.train.get_checkpoint_state(FLAGS.checkpoint_dir) 134 if checkpoint and checkpoint.model_checkpoint_path: 135 saver.restore(sess, checkpoint.model_checkpoint_path) 136 137 138def _export_graph(sess, epoch): 139 file_path = os.path.join(FLAGS.graph_dir, 'graph_%02d_epoch.pb' % epoch) 140 with gfile.FastGFile(file_path, 'wb') as f: 141 f.write(constant_graph_def.SerializeToString()) 142 143 144if __name__ == '__main__': 145 tf.app.run()

試したこと

_eval関数をもう1つ作って、
prediction = _eval(sess, top_k_op,
train_placeholder, label_placeholder)
print('epoch %d duration = %d sec, prediction = %.3f'
% (epoch, duration, prediction))
をfor文で回そうとしたのですがうまく行きませんでした。

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

プログラムは「TensorFlowはじめました ― 実践!最新Googleマシンラーニング」を参考にしています。
data_1.bin,data_2.bin,data_3.binにはそれぞれ3万枚ずつ3232の画像が入っており、test.binには、3種類の3232画像を1万枚ずつ入れた合計3万枚の画像が入っています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

真の答えは分かっているのですから、それごとに正解数と判別回数を積算していけば出せますよね。そういうことではなく?

Python

1def _eval(sess, top_k_op, input_image, label_placeholder): 2 if not FLAGS.test_data: 3 return np.nan 4 5 image_reader = Cifar10Reader(FLAGS.test_data) 6 true_count = 0 7 for index in range(30000): 8 image = image_reader.read(index) 9 10 # この、predictions の形を調べて下さい。 11 predictions = sess.run([top_k_op], 12 feed_dict={ 13 input_image: image.byte_array, 14 # これが、評価した画像のクラスです。 15 label_placeholder: image.label 16 }) 17 # これが、今表示している「正解の数」です。 18 # おそらく、正解の時に1、不正解の時に0になっていると思います。 19 # ですから、「全体の数」と「正解した数」について、クラスス数の配列を作って、 20 # ここでクラス別に足し込んでいき、 21 true_count += np.sum(predictions) 22 image_reader.close() 23 24 # 最後に「正解した数」÷「全体の数」をすれば、クラスごとの正解率が求まります。 25 return (true_count / 30000.0)

投稿2019/11/23 13:41

編集2019/12/07 01:59
Q71

総合スコア995

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

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

sinugo

2019/11/26 08:48

現在の出力文は、 epoch ○ duration = ○○sec, prediction = ○○ となっていて、epochごとの評価にかかった時間と全体の正解率のみが出力されるので、 どのクラスが何枚正しく評価されているかがわからない状態です、、
Q71

2019/11/28 13:53

「現在の出力」は、どこで出していますか。 その出力内容を決めるのは、どこですか。 出力内容を計算している箇所で、正解のクラスがわかるのではないですか。 だったら、クラスごとに正解の数と推論した回数を足し込んでいけば、正解率を計算できますよね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問