TensorFlow读书笔记
1.TensorFlow基础知识
Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算.数据流图中的图就是我们所说的有向图,我们知道,在图这种数据结构中包含两种基本元素:节点和边.这两种元素在数据流图中有自己各自的作用.节点用来表示要进行的数学操作,另外,任何一种操作都有输入/输出,因此它也可以表示数据的输入的起点/输出的终点.边表示节点与节点之间的输入/输出关系,一种特殊类型的数据沿着这些边传递.这种特殊类型的数据在TensorFlow被称之为tensor,即张量,所谓的张量通俗点说就是多维数组.当我们向这种图中输入张量后,节点所代表的操作就会被分配到计算设备完成计算.
TensorFlowd的四个特性:
灵活性
可移植性
多语言支持
高效性
2.核心概念
TensorFlow中的计算可以表示为一个有向图,或者称为计算图,其中的每一个计算操作将作为一个节点,节点和节点之间的连接称为边。
计算图的每一个节点可以有任意个输入和任意个输出,每一个节点描述了一种运算操作,节点可以算是运算操作的实例化。在计算图边中流动的数据被称为张量(tensor)。
3.张量生成
tensorflow中的tensor就是张量,是多维数组(多维列表),用阶来表示张量的维数,判断张量是几阶的可以看有几个方括号。
import tensorflow as tf
a=tf.constant([1,5],dtype=tf.int64)
#直接打印a,会输出a的所有信息
print(a)
#打印a的数据类型
print(a.dtype)
#打印a的形状
print(a.shape)

很多时候数据是用numpy给出的,可以通tf.convert_to_tensor(数据名,dtype=数据类型(可选))将其转化为tensor数据类型
import tensorflow as tf
import numpy as np
a=np.arange(0,5)
b=tf.convert_to_tensor(a,dtype=tf.int64)
print(a)
print(b)
4.实现原理
TensorFlow有一个重要的组件是client即客户端,它通过session的接口和master以及多个work相连。其中每一个work可以与多个硬件设备相连,并负责管理这些硬件。而master则负责指导所有的work按照流程执行计算图。
TensorFlow为CPU和GPU提供了管理设备的对象接口,每一个对象负责分配、释放设备的内存,以及执行节点的运算核。
在只有一个硬件设备的情况下,计算图会按照依赖关系被顺序执行。
5.扩展功能
TensorFlow原生支持自动求导,但是也会给TensorFlow的优化带来麻烦。
TensorFlow还支持单独执行子图。
TensorFlow支持计算图的控制流。(if/while etc.)
input node可以让用户直接输入文件系统路径。
队列是TensorFlow任务调度的一个重要特性。
容器是TensorFlow中一种特殊的管理长期变量的机制。
6.性能优化
TensorFlow能自动识别重复计算,并改写计算图
可以巧妙的安排计算的顺序来改善数据传输和内存占用的问题
支持异步计算
第三方高度优化库,eg. cuDNN,cuda-convenet
支持对数据精度进行压缩
7.tensorflow矩阵及运算
import tensorflow as tf
tf.compat.v1.disable_eager_execution() #因为安装的是高版本的,要想session能用必须先写这个
sess= tf.compat.v1.Session()
#从4维向量生成(2,2)的矩阵
mat_a=tf.constant([1,2,3,4])
mat_a=tf.reshape(mat_a,(2,2))
print('mat_a:\n',sess.run(mat_a))
#生成2*3的矩阵
mat_b=tf.constant([1,3,5,7,9,11])
mat_b=tf.reshape(mat_b,(2,3))
print('mat_b:\n',sess.run(mat_b))
#矩阵乘法
mat_c=tf.matmul(mat_a,mat_b)
print('mat_c:\n',sess.run(mat_c))
8.初学者快速入门
import tensorflow as tf #载入并准备好MNIST数据集,将样本从整数转换为浮点数 mnist = tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 #将模型的各层堆叠起来,以搭建tf.keras.Sequential模型。为训练选择优化器和损失函数 model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10, activation='softmax') ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) #训练并检验模型 model.fit(x_train, y_train, epochs=5) model.evaluate(x_test, y_test, verbose=2)
输出:
Epoch 1/5 1875/1875 [==============================] - 13s 6ms/step - loss: 0.3004 - accuracy: 0.9129 Epoch 2/5 1875/1875 [==============================] - 7s 4ms/step - loss: 0.1440 - accuracy: 0.9574 Epoch 3/5 1875/1875 [==============================] - 6s 3ms/step - loss: 0.1074 - accuracy: 0.9677 Epoch 4/5 1875/1875 [==============================] - 6s 3ms/step - loss: 0.0881 - accuracy: 0.9730 Epoch 5/5 1875/1875 [==============================] - 6s 3ms/step - loss: 0.0751 - accuracy: 0.9775 313/313 - 1s - loss: 0.0741 - accuracy: 0.9769
Out[15]:
[0.07411046326160431, 0.9768999814987183]
9.占位符(Placeholder)
占位符,用于表示输入输出数据的格式,声明了数据位置,允许传入指定类型和形状的数据,通过会话中的feed_dict参数获取数据,在计算图运行时使用获取的数据进行计算,计算完毕后获取的数据就会消失。
x = tf.compat.v1.placeholder(tf.int32) y = tf.compat.v1.placeholder(tf.int32) z = tf.add(x, y) session = tf.compat.v1.Session() with session: print(session.run([z], feed_dict={x: [1, 2], y: [2, 3]}))
输出:[array([3, 5])]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!