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

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

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

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

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

Python

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

Q&A

1回答

3071閲覧

tensorflowのモデル復元における初期化について

leon30

総合スコア20

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2017/07/02 12:54

###概要

<概要>
Webアプリに実装するエンジンとして、tensorflowによる予測モデルを作っています。

<前提>
ある商品を購入する際に、意思決定に影響を与える要素12個を入力データとして
商品のスペックに関わる要素1個を予測させようとしています。
これらのデータをCSVで用意し、1列目に正解のデータ、2~13列目に入力データを配列しています。

<方法>
事前に1400件のデータを用いて学習を行い、学習済みのモデルを保存。
そのモデルをサーバー上に置き、UIから送られてくるデータ(12列×1行)に対して保存済みのモデルを復元し、値を予測させるという段取りで考えています。

<問題が発生した箇所>
・予測結果の表示
・復元も出来ているか怪しい…

###発生している問題・エラーメッセージ

初期化されていない変数を使用しようとしているとのエラーが出ます。
事前の学習で得た重みを復元したモデルで利用したいのでリストアしているので
どうすれば初期化していない変数を利用できるのでしょうか?
また復元したモデルで予測結果を表示するということはそもそも無理なのでしょうか。

エラーメッセージはこちら↓

FailedPreconditionError (see above for traceback): Attempting to use uninitialized value output_bias_7 [[Node: output_bias_7/read = Identity[T=DT_FLOAT, _class=["loc:@output_bias_7"], _device="/job:localhost/replica:0/task:0/cpu:0"](output_bias_7)]]

実行したソースコードはこちらです。

python

1import tensorflow as tf 2 3 4SCORE_SIZE = 12 5HIDDEN_UNIT_SIZE = 70 6TRAIN_DATA_SIZE = 1 7 8sess = tf.Session() 9ckpt = tf.train.get_checkpoint_state("C:/Users/Member/Desktop/save_tensor") 10print(ckpt) 11 12last_model = "C:/Users/Member/Desktop/save_tensor/testsave" 13saver = tf.train.import_meta_graph('C:/Users/Member/Desktop/save_tensor/testsave.meta') 14print ("load " + last_model) 15saver.restore(sess, last_model) 16 17score_placeholder = tf.placeholder("float", [None, SCORE_SIZE], name="score_placeholder") 18hidden1_weight = tf.Variable(tf.truncated_normal([SCORE_SIZE, HIDDEN_UNIT_SIZE], stddev=0.1), name="hidden1_weight") 19hidden1_bias = tf.Variable(tf.constant(0.1, shape=[HIDDEN_UNIT_SIZE]), name="hidden1_bias") 20 21hidden1_output = tf.nn.relu(tf.matmul(score_placeholder, hidden1_weight) + hidden1_bias) 22 23output_weight = tf.Variable(tf.truncated_normal([HIDDEN_UNIT_SIZE, 1], stddev=0.1), name="output_weight") 24output_bias = tf.Variable(tf.constant(0.1, shape=[1]), name="output_bias") 25 26output = tf.matmul(hidden1_output, output_weight) + output_bias 27 28 29print(hidden1_output) 30 31import numpy 32 33raw_input = numpy.loadtxt(open("C:/Users/Member/Desktop/onerecord2.csv"), delimiter=",") 34 35 36[tensor,score]=numpy.hsplit(raw_input, [None]) 37 38 39 40print(tensor) 41 42print(score_placeholder) 43 44print(raw_input) 45 46best=sess.run(output,feed_dict={score_placeholder:raw_input}) 47 48print(best)

###全体のソースコード

学習を行いモデルを保存するまで

python

1import tensorflow as tf 2import numpy 3 4 5 6SCORE_SIZE = 12 7HIDDEN_UNIT_SIZE = 70 8TRAIN_DATA_SIZE = 1395 9 10raw_input = numpy.loadtxt(open("C:/Users/Member/Desktop/traindata.csv"), delimiter=",") 11[tensor, score] = numpy.hsplit(raw_input, [1]) 12 13[tensor_train, tensor_test] = numpy.vsplit(tensor, [TRAIN_DATA_SIZE]) 14[score_train, score_test] = numpy.vsplit(score, [TRAIN_DATA_SIZE]) 15 16def inference(score_placeholder): 17 with tf.name_scope('hidden1') as scope: 18 hidden1_weight = tf.Variable(tf.truncated_normal([SCORE_SIZE, HIDDEN_UNIT_SIZE], stddev=0.1), name="hidden1_weight") 19 hidden1_bias = tf.Variable(tf.constant(0.1, shape=[HIDDEN_UNIT_SIZE]), name="hidden1_bias") 20 hidden1_output = tf.nn.relu(tf.matmul(score_placeholder, hidden1_weight) + hidden1_bias) 21 with tf.name_scope('output') as scope: 22 output_weight = tf.Variable(tf.truncated_normal([HIDDEN_UNIT_SIZE, 1], stddev=0.1), name="output_weight") 23 output_bias = tf.Variable(tf.constant(0.1, shape=[1]), name="output_bias") 24 output = tf.matmul(hidden1_output, output_weight) + output_bias 25 return tf.nn.l2_normalize(output, 0) 26 27def loss(output, tensor_placeholder, loss_label_placeholder): 28 with tf.name_scope('loss') as scope: 29 loss = tf.nn.l2_loss(output - tf.nn.l2_normalize(tensor_placeholder, 0)) 30 tf.summary.scalar('loss_label_placeholder', loss) 31 return loss 32 33def training(loss): 34 with tf.name_scope('training') as scope: 35 train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss) 36 return train_step 37 38 39 40with tf.Graph().as_default(): 41 tensor_placeholder = tf.placeholder("float", [None, 1], name="tensor_placeholder") 42 score_placeholder = tf.placeholder("float", [None, SCORE_SIZE], name="score_placeholder") 43 loss_label_placeholder = tf.placeholder("string", name="loss_label_placeholder") 44 45 feed_dict_train={ 46 tensor_placeholder: tensor_train, 47 score_placeholder: score_train, 48 loss_label_placeholder: "loss_train" 49 } 50 51 feed_dict_test={ 52 tensor_placeholder: tensor_test, 53 score_placeholder: score_test, 54 loss_label_placeholder: "loss_test" 55 } 56 57 output = inference(score_placeholder) 58 loss = loss(output, tensor_placeholder, loss_label_placeholder) 59 training_op = training(loss) 60 61 summary_op = tf.summary.merge_all() 62 63 init = tf.global_variables_initializer() 64 65 best_loss = float("inf") 66 67 with tf.Session() as sess: 68 summary_writer = tf.summary.FileWriter('data', graph_def=sess.graph_def) 69 sess.run(init) 70 71 for step in range(10000): 72 sess.run(training_op, feed_dict=feed_dict_train) 73 loss_test = sess.run(loss, feed_dict=feed_dict_test) 74 if loss_test < best_loss: 75 best_loss = loss_test 76 best_match = sess.run(output, feed_dict=feed_dict_test) 77 if step % 100 == 0: 78 summary_str = sess.run(summary_op, feed_dict=feed_dict_test) 79 summary_str += sess.run(summary_op, feed_dict=feed_dict_train) 80 summary_writer.add_summary(summary_str, step) 81 82 print (sess.run(tf.nn.l2_normalize(tensor_placeholder, 0), feed_dict=feed_dict_test)) 83 print (best_match) 84 85 86 saver=tf.train.Saver() 87 88 saver.save(sess,"C:/Users/Member/Desktop/save_tensor/testsave") 89 90 print('Saved a model.') 91 92 sess.close()

###開発環境
Windows10
python3.5
Anaconda3
Tensorflow1.0

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

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

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

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

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

quickquip

2017/07/02 13:26

再現実験や課題の類で「このモデルと初期値で問題が解ける」と分かっていて実装しているんでしょうか? データや正解に負値はあるんでしょうか? 与えられている正解データは「正解」なのでしょうか? 過去の「実績」なのでしょうか? 損失関数の下がり具合は確認していますか? 気になったのはこのあたりでした。
guest

回答1

0

restoreしたあとに variable を宣言しているからですね。逆にしたら動くかも。
もしくは、meta ファイルも読んでください。

投稿2017/07/02 15:37

MasashiKimura

総合スコア1150

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問