

以下のコードを実行すると

> AttributeError: module 'tensorflow' has no attribute 'Session'

と表示されます。どうしてでしょうか？

[code]

    import tensorflow as tf　　
    sess = tf.Session()
    hello  = tf.constant('Hello')
    print(sess.run(hello))
    
[/code]


CC BY-SA 4.0
2019-10-18T05:23:21.870
59780
2021-01-27T02:07:25.647
2019-10-18T12:16:29.067
32986
36247
question
python python3 tensorflow
AttributeError: module 'tensorflow' has no attribute 'Session'について


tensorflow 2.0では、tf.Sessionやtf.placeholderは使いません。  
<https://www.tensorflow.org/guide/migrate>

> Every `v1.Session.run` call should be replaced by a **Python function**.  
>  \- The `feed_dict` and `v1.placeholder`s become **function arguments**.  
>  \- The fetches become the **function's return value**.  
>  \- During conversion eager execution allows easy debugging with standard
> Python tools like pdb.  
>  After that add a `tf.function` decorator to make it run efficiently in
> graph.

Sessionの代わりに、pythonの普通の関数として実行します。

[code]

    import tensorflow as tf
    from tensorflow.keras.backend import eval
    
    def example(x, c):
        return c
    
    hello  = tf.constant('Hello')
    f = tf.function(example)
    print(eval(f([], hello)))
    
[/code]

v1でfeed_dictで渡していたものは、関数の引数(この場合はx)に渡すように変更されたようです。ただし、通常は引数として渡されたxの値(v1におけるplaceholder)は他の定数(tf.constant)等と演算するなど、なんらかの処理をして返り値を出力するように関数を作ります。v2での変更点としては、placeholderが関数の引数に変わったということです。

定数等のテンソルの内容をどうしても見たい場合はkerasバックエンドのevalを使えば見れます。なので、定数の値をただ評価する場合は、関数を作らずにkerasバックエンドの`eval(hello)`などとすれば実行できます。


CC BY-SA 4.0
2019-10-19T07:00:40.450
59807
2019-10-22T01:24:52.373
2019-10-22T01:24:52.373
59780
answer