如何理解Tensorflow中的Tensor? tf.session()和tf.run()抽象理解

2021/04/07 14:57:40

1 关于Tensorflow环境配置的各种Bug:

import tensorflow as tf

前言: 这几天装各种包、各种环境, 一直不成功的都要砸电脑了, 留一些记录在前面;
引入tensorflow时候出现的99%的问题都是版本问题, tensorflow与各种包之间的依赖关系非常复杂, 一但某一个库的版本不匹配就无法正确引入Tensorflow.

解决:

  1. 把pip的源改为阿里云
pip config set global.index-url    http://mirrors.aliyun.com/pypi/simple
  1. 老老实实用pip install tensorflow
  2. 查看报错, 看自己的哪个库与tensorflow版本不匹配, 使用pip install numpy==1.16.0等指定版本的指令修改出问题包的版本

不要同时使用pip、conda、Pycharm自带的库版本管理!!!

笔者头铁试了挂VPN下载、用PyCharm的自带库管理工具、本地安装等各种各种的歪门邪道, 最后不是装不成功、就是一下子环境里多了好几个同名包…
老老实实用pip安装才是王道…

2 如何理解Tensor?

在深度学习里,Tensor实际上就是一个多维数组(multidimensional array)。

而Tensor的目的是能够创造更高维度的矩阵、向量

参考资料: https://zhuanlan.zhihu.com/p/48982978

在这里插入图片描述
现在将三维的张量用一个正方体来表示:
在这里插入图片描述
这样子可以进一步生成更高维的张量:
在这里插入图片描述
粗俗的来理解: Tensorflow用张量来表示我们常用的值、矩阵
例如:
在这里插入图片描述
让 a = tf.add(1,2)
我们可以知道调用add函数后1+2的值应该为3, 但这里, tensorflow用一个张量来表示a

3如何得到a = tf.add(1,2)中a的值?

3.1 sess = tf.Session()

我们需要创建一个Session对象. 之后我们可以通过Session对象的run(op)来执行我们想要的操作。tensorflow的内核使用更加高效的C++作为后台,以支撑它的密集计算。tensorflow把前台(即python程序)与后台程序之间的连接称为"会话(Session)"。

3.2 sess.run(a)

run()方法

Session对象创建完毕,便可以使用它最重要的方法run()来启动所需要的数据流图进行计算。

回答问题, 如何得到a的值?

建立一个session对象, 调用run方法 让改tensorflow帮我们计算a的值并输出

在这里插入图片描述

run()方法有4个参数:

run(
    fetches,
    feed_dict=None
    options=None,
    run_metadata=None
)

核心可以理解为计算fetches中的值

fetches参数: ‘取得之物’,表示数据流图中能接收的任意数据流图元素,各类Op/Tensor对象。Op,run()将返回None;Tensor,rnu()将返回Numpy数组。

run的第二个参数怎么用?

在这里插入图片描述
feed_dict 可以用来输入一些预设的占位符,或是修改其中某些输入变量的值, 为tensor的计算提供必要的输入