tensorflow —— tf.Session()

tf.Session()

在TensorFlow的世界里,变量的定义和初始化是分开的,所有关于图变量的赋值和计算都要通过tf.Session的run来进行。想要将所有图变量进行集体初始化时应该使用tf.global_variables_initializer。

session用于执行命令,对话控制。sess.run()用于执行某一个小图片上的功能。

sess.run()

feed_dict

  1. 给使用placeholder创建出来的tensor赋值
  2. feed 使用一个 ‘值’ 临时替换一个 op 的输出结果。提供 feed 数据作为 run() 调用的参数。feed 只在调用它的方法内有效,方法结束,feed 就会消失。
import tensorflow as tf
y = tf.Variable(1)
b = tf.identity(y)
with tf.Session() as sess:
    tf.global_variables_initializer().run()
    print(sess.run(b,feed_dict={y:3})) #使用3 替换掉
    #tf.Variable(1)的输出结果,所以打印出来3 
    #feed_dict{y.name:3} 和上面写法等价
    print(sess.run(b))  #由于feed只在调用他的方法范围内有效,所以这个打印的结果是 1

必须先构建(定义)graph,之后才能运行(启动)graph。

tf.Graph

两种用于运行计算图(graph)的会话(session)

tf.Session()

tf.InteractivesSession()

tf.Session()

fetch 取回

feed 注入

用途
  1. 临时替代graph中任意操作的输入tensor
  2. 对graph中任何op提交补丁(插入一个tensor)
使用方式
  1. feed_dict提供数据,作为sess.run( )调用的参数。使用tf.placeholder( ),为某些操作的输入创建占位符。
  2. 如果没有正确提供tf.placeholder( ),feed操作将产生错误。
  3. feed注入的值不能是tf的tensor对象,应该是Python常量、字符串、列表、numpy ndarrays,TensorHandles。

tf.InteractivesSession()

当python编辑环境是shell、IPython等交互式环境时,用方法tensor.eval( ),operation.run( ) 代替sess.run( )

with

上下文管理器在对象内实现了两个方法:enter() 和__exit__()
enter()方法会在with的代码块执行之前执行,exit()会在代码块执行结束后执行。
exit()方法内会自带当前对象的清理方法。

这个警告信息表明,您正在使用的 TensorFlow 函数 `softmax_cross_entropy_with_logits` 已被标记为过时(deprecated),并且在未来的主要版本中可能会移除。此外,更新提示指出,在未来的版本中,默认情况下会允许梯度流入标签输入(labels)进行反向传播。 接下来我们将分析问题并给出修订建议: --- ### 问题分析 1. **函数已弃用** 当前代码中调用了 `softmax_cross_entropy_with_logits` 这一函数,但它已经被标记为“废弃”状态。这意味着它仍然可以使用,但官方不推荐继续依赖该函数。 2. **未来的行为变化** 更新日志提到,“未来的主要版本将默认允许梯度流到标签(labels)”。目前这一功能尚未启用,但如果升级到更高版本的 TensorFlow 后未修改代码,则可能导致意外结果。 3. **推荐替换方法** 新版 TensorFlow 提供了更安全、明确的接口——`tf.nn.softmax_cross_entropy_with_logits_v2` 或其别名 `tf.losses.sparse_categorical_crossentropy` (适用于整数形式分类任务)。它们强制用户通过参数控制 logits 和 labels 是否需要求导。 --- ### 解决方案 我们可以将旧版的 `softmax_cross_entropy_with_logits` 替换为新版函数,并显式指定相关选项来消除警告信息。以下是示例代码: #### 修改后的代码 ```python import tensorflow as tf # 示例数据 logits = tf.constant([[2.0, 1.0, 0.1], [0.5, 0.9, 1.2]]) labels_one_hot = tf.constant([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]) # 使用新的交叉熵损失计算方式 (v2) loss = tf.nn.softmax_cross_entropy_with_logits(labels=labels_one_hot, logits=logits) with tf.compat.v1.Session() as sess: result = sess.run(loss) print(result) ``` 若进一步简化,还可以利用高级封装好的 Loss 计算工具: ```python cce_loss_fn = tf.keras.losses.CategoricalCrossentropy(from_logits=True) result = cce_loss_fn(labels_one_hot, logits).numpy() print(result) ``` 这里我们选择了 Keras 内置的方法作为替代品之一。 --- ### 更改要点说明 1. **新函数的引入** 我们替换了原始函数,转而使用现代版本的实现——无论是 `tf.nn.softmax_cross_entropy_with_logits` 的 v2 模型还是 keras 封装层都更加稳定可靠。 2. **新增标志位支持自定义需求** 在某些场景下可能确实希望梯度回传至 Labels 输入端;此时可通过设置相应布尔值满足特定要求。不过对于大多数常规监督学习来说,默认关闭即可正常工作无需额外配置。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值