31748


TensorFlowの非常にシンプルなAutoencoderのコード：[mnist_ae1.py](https://gist.github.com/tomokishii/7ddde510edb1c4273438ba0663b26fc6#file-
mnist_ae1-py)をもちいて,`w_enc`や`b_enc`の値の中身を見て保存する方法をご教授願いたいです．  
以前似たことを行ったので,そのコードを元に[mnist_ae1.py](https://gist.github.com/tomokishii/7ddde510edb1c4273438ba0663b26fc6#file-
mnist_ae1-py)の下記の部分

[code]

    # Train
    init = tf.initialize_all_variables()
    
    with tf.Session() as sess:
        sess.run(init)
        print('Training...')
        for i in range(10001):
            batch_xs, batch_ys = mnist.train.next_batch(128)
            train_step.run({x: batch_xs, y_: batch_ys})
            
            if i % 1000 == 0:
                train_loss = loss.eval({x: batch_xs, y_: batch_ys})
                print('  step, loss = %6d: %6.3f' % (i, train_loss))
            
        # generate decoded image with test data
        test_fd = {x: mnist.test.images, y_: mnist.test.labels}
        decoded_imgs = decoded.eval(test_fd)
        print('loss (test) = ', loss.eval(test_fd))
    
[/code]

の最後に

[code]

    　　w_enc_array, b_enc_array = train_step.run([w_enc, b_enc], {x: mnist.test.images})
    　　print("w_enc :", w_enc_array)
    　　print("b_enc :", b_enc_array)
    
    　　weight_result = np.append(w_enc_array, 0)
    　　weight_result = np.append(weight_result, b_enc)
    　　np.savetxt("weight_result.csv", weight_result, delimiter=",")
    
[/code]

を加えてみたのですが,

[code]

    w_enc_array, b_enc_array = train_step.run([w_enc, b_enc], {x: mnist.test.images})
      File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1449, in run
        _run_using_default_session(self, feed_dict, self.graph, session)
      File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 3664, in _run_using_default_session
        if session.graph is not graph:
    AttributeError: 'dict' object has no attribute 'graph'
    
[/code]

というエラーが返ってきました．

以前`tf.Session()`で学習を行っているものでは出来たのですが,`tf.Session()`にせず`train_step.run`としている今回のような場合では何か根本的な違いがあったりするのでしょうか？  
どうぞよろしくお願いいたします．


CC BY-SA 3.0
2017-01-06T10:26:24.550
31666
2017-01-10T11:15:37.153
2020-06-17T08:14:45.997
-1
20111
question
python tensorflow
TensorFlowの重みなどについて


理屈部分がうまく説明できずダラダラしてしまったので、先に結論を書かせていただきます。  
w_enc_array=sess.run(w_enc)  
とすることでw_encが取り出せます。  
訓練の過程での変化がみたい場合は訓練をしているループ中に入れれば可能です。

[code]

    train_step.runとしている今回のような場合では何か根本的な違いがあったりするのでしょうか？
    
[/code]

train_step.run()は作成されたtrain_stepのモデルopsになり、train_step.run()はそのモデルを実行するという処理になります。  
こちらは第一引数がfeed_dictとなっておりますので「第一引数がfeed_dictではない」と怒られている形になりますし、返り値も定義したモデル次第となり「W/bを取り出すという」というモデルを作らない限り取り出す事はできません。  
(詳細は省きますが、第一引数をfeed_dictを設定しても他にもDefaultSessionがないとか、y_が不足しているというエラーが出るかと思います。)

tf.Session.run()の第一引数はfetchとなっております。こちらはAPI Referenceは以下です。  
<https://www.tensorflow.org/versions/master/api_docs/python/client/session_management#Session.run>

sess.run(W)でSession中のWの値を参照していることとなります。

また、Wの変化がみたいだけならばプログラムで吐き出すのではなくtensorboardを使ったほうが楽かと思います。  
tensorboard内にてcsvで吐き出せる機能もついていますので。

tensorboardの詳細は省かせていただきます。


CC BY-SA 3.0
2017-01-10T10:11:28.447
31748
2017-01-10T11:15:37.153
2017-01-10T11:15:37.153
19716
19716
31666
answer