python - 张量什么时候输出一个值,什么时候输出一个张量对象?
问题描述
我有一些使用输入作为 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
,不确定视频中使用的那个。
解决方案
是的,这是因为 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)>
推荐阅读
- apache-flink - 如何在任务之间共享二进制文件?
- kubernetes - kubectl get componentstatus 显示额外的 etcd 实例
- git - IntelliJ git 无法识别角度项目文件中的更改
- java - Selenium Webdriver 功能连续性
- angular - HTTP Get 在 Angular 上不起作用
- javascript - 无法在 ajax 中使用 jquery 获取 JSON 数据
- javascript - insertAdjcentHTML 在 JsDOM 中不起作用?
- spring-webflux - 为什么带有 Reactive Webflux 的 Spring Cloud Contract 要求 EXPLICIT 测试模式
- apache-spark - Spark 数据集写入之间的区别
- angular - 如何使用 Angular 6 在函数中传递动态模板引用变量