首页 > 解决方案 > 张量什么时候输出一个值,什么时候输出一个张量对象?

问题描述

我有一些使用输入作为 tensorflow 占位符创建神经网络图的经验。直到现在,我曾经相信这些图表可以用类似sess.run()或更精确的方式来评估,如这里描述的。

我正在学习了解 GAN 的工作原理,并遇到了作者创建函数的本教程(视频中的时间 11:00):

import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
import time

def make_discriminator_model():
    model = tf.keras.Sequential()
    model.add(tf.keras.layers.Conv2D(7,(3,3) , padding = "same" , input_shape = (28,28,1)))
    model.add(tf.keras.layers.Flatten())
    model.add(tf.keras.layers.LeakyReLU())
    model.add(tf.keras.layers.Dense(50,activation = 'relu'))
    model.add(tf.keras.layers.Dense(1))
    return model 

然后按如下方式评估前向传递:

model_discriminator = make_discriminator_model()
model_discriminator(np.random.rand(1,28,28,1).astype("float32"))

他得到以下输出:

<tf.Tensor: id=161  ,shape=(1,1) ,dtype=float32 , numpy=array([[0.01451516]],dtype = float32)>

该值numpy=array([[0.01451516]]是前向传递的输出。在运行相同的代码时,我得到一个信息量较少的张量,即:

<tf.Tensor 'sequential_5/dense_11/BiasAdd:0' shape=(1, 1) dtype=float32>

差异是由于环境中 tensorflow 的不同版本造成的吗?我正在使用tensorflow 1.14.0,不确定视频中使用的那个。

标签: pythontensorflow

解决方案


是的,这是因为 tensorflow 的版本不同。

tensorflow 1.14 版中,运行代码的输出如下(添加了 tf 版本的打印),

tensorflow version: 1.14.0
<tf.Tensor 'sequential_3/dense_7/BiasAdd:0' shape=(1, 1) dtype=float32>

如果你想提取 tensorflow 1.14 版本中的值,那么修改代码如下,

#!pip install tensorflow==1.14

import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
import time

print("tensorflow version:",tf.__version__)

def make_discriminator_model():
    model = tf.keras.Sequential()
    model.add(tf.keras.layers.Conv2D(7,(3,3) , padding = "same" , input_shape = (28,28,1)))
    model.add(tf.keras.layers.Flatten())
    model.add(tf.keras.layers.LeakyReLU())
    model.add(tf.keras.layers.Dense(50,activation = 'relu'))
    model.add(tf.keras.layers.Dense(1))
    return model 

model_discriminator = make_discriminator_model()

#initialize the variable
init_op = tf.initialize_all_variables()

#run the graph
with tf.Session() as sess:
    sess.run(init_op) #execute init_op
    print("Value of the model_discriminator function:",sess.run(model_discriminator(np.random.rand(1,28,28,1).astype("float32"))))

输出将是 -

tensorflow version: 1.14.0
Value of the model_discriminator function: [[0.00674586]]

tensorflow 2.1 版中,运行代码的输出如下(添加了 tf 版本的打印),

tensorflow version: 2.1.0
<tf.Tensor: shape=(1, 1), dtype=float32, numpy=array([[-0.01521136]], dtype=float32)>

推荐阅读