当前位置: 首页 > news >正文

TensorFlow 学习

目录

  • 1. TensorFlow 是什么
  • 2. 安装与验证
  • 3. 学习路线
  • 4. Tensor 基础
  • 5. 自动求导与 GradientTape
  • 6. Keras 快速上手
  • 7. tf.data 数据管道
  • 8. 完整示例一:线性回归
  • 9. 完整示例二:二分类模型
  • 10. 完整示例三:MNIST 图像分类
  • 11. 保存、加载与推理
  • 12. GPU、性能与调试
  • 13. 常见错误
  • 14. 面试常见问题
  • 15. 建议练习
  • 16. 参考资料

1. TensorFlow 是什么

TensorFlow 是一个用于机器学习和深度学习的开源框架,核心特点是:

  • 支持张量计算和自动求导。
  • 提供 Keras 作为高层 API。
  • 支持 CPU、GPU、TPU 等多种设备。
  • 既适合快速实验,也适合生产部署。

一个典型训练流程是:

准备数据 -> 构建模型 -> 定义损失和优化器 -> 前向传播 -> 计算损失 -> 反向传播 -> 更新参数 -> 保存模型

常用入口:

importtensorflowastf

2. 安装与验证

2.1 创建虚拟环境

Windows PowerShell:

python-m venv.venv.\.venv\Scripts\activate python-m pip install--upgrade pip setuptools wheel

Linux/macOS:

python3-mvenv .venvsource.venv/bin/activate python-mpipinstall--upgradepip setuptools wheel

2.2 安装 TensorFlow

官方推荐使用pip安装:

pipinstalltensorflow

如果你需要更详细的系统要求、GPU 方案和平台差异,优先查看官方安装页:

https://www.tensorflow.org/install https://www.tensorflow.org/install/pip

2.3 验证安装

新建check_tf.py

importtensorflowastfprint("tensorflow version:",tf.__version__)print("eager execution:",tf.executing_eagerly())print("gpus:",tf.config.list_physical_devices("GPU"))x=tf.constant([1.0,2.0,3.0])print("sum:",tf.reduce_sum(x).numpy())

运行:

python check_tf.py

3. 学习路线

建议按这个顺序学:

  1. tf.Tensor:创建、形状、类型、运算。
  2. 自动求导:tf.GradientTape
  3. Keras:SequentialModelLayer
  4. 损失函数和优化器:lossesoptimizers
  5. tf.data:数据加载、批量、打乱、预取。
  6. 训练循环:model.fit()和自定义训练。
  7. 保存加载:save_weightsSavedModel
  8. GPU 和性能优化。

4. Tensor 基础

Tensor 是 TensorFlow 中的核心数据结构,类似 NumPy 数组,但支持自动求导和设备加速。

4.1 创建 Tensor

importtensorflowastf a=tf.constant([1,2,3])b=tf.zeros([2,3])c=tf.ones([2,3])d=tf.random.normal([2,3])e=tf.range(0,10,delta=2)print(a)print(b.shape)print(d.dtype)

4.2 常用属性

importtensorflowastf x=tf.random.normal([4,5])print(x.shape)print(x.dtype)print(x.ndim)

4.3 索引和切片

importtensorflowastf x=tf.reshape(tf.range(12),[3,4])print(x)print(x[0])print(x[:,1])print(x[1:3,:2])

4.4 数学运算

importtensorflowastf a=tf.constant([[1.0,2.0],[3.0,4.0]])b=tf.constant([[10.0,20.0],[30.0,40.0]])print(a+b)print(a*b)print(tf.matmul(a,b))print(tf.reduce_mean(a))print(tf.reduce_sum(a,axis=0))

4.5 广播机制

importtensorflowastf x=tf.random.normal([3,4])bias=tf.constant([1.0,2.0,3.0,4.0])y=x+biasprint(y.shape)

4.6 Tensor 和 NumPy 互转

importnumpyasnpimporttensorflowastf arr=np.array([1,2,3],dtype=np.float32)t=tf.convert_to_tensor(arr)print(t.numpy())

5. 自动求导与 GradientTape

TensorFlow 用tf.GradientTape记录计算过程并计算梯度。

5.1 最小例子

importtensorflowastf x=tf.Variable(2.0)withtf.GradientTape()astape:y=x**2+3*x+1dy_dx=tape.gradient(y,x)print("y =",y.numpy())print("dy/dx =",dy_dx.numpy())

5.2 多变量求导

importtensorflowastf w=tf.Variable([1.0,2.0,3.0])x=tf.constant([4.0,5.0,6.0])withtf.GradientTape()astape:y=tf.reduce_sum(w*x)grad=tape.gradient(y,w)print(grad.numpy())

5.3 关闭梯度记录

推理时不需要梯度:

importtensorflowastfwithtf.device("/CPU:0"):x=tf.constant(2.0)y=x*10print(y.numpy())

5.4 只看一次的梯度

默认情况下,GradientTape只用一次。要重复求导可以设置:

withtf.GradientTape(persistent=True)astape:...

但用完记得释放,避免占内存。

6. Keras 快速上手

TensorFlow 里最常用的是 Keras。它提供了很顺手的高层 API,适合快速搭建模型。

6.1 Sequential 模型

importtensorflowastf model=tf.keras.Sequential([tf.keras.layers.Dense(32,activation="relu",input_shape=(10,)),tf.keras.layers.Dense(16,activation="relu"),tf.keras.layers.Dense(3)])model.summary()

6.2 Functional API

适合多输入、多分支、残差结构等复杂模型。

importtensorflowastf inputs=tf.keras.Input(shape=(10,))x=tf.keras.layers.Dense(32,activation="relu")(inputs)x=tf.keras.layers.Dense(16,activation="relu")(x)outputs=tf.keras.layers.Dense(3)(x)model=tf.keras.Model(inputs,outputs)model.summary()

6.3 编译模型

model.compile(optimizer=tf.keras.optimizers.Adam(1e-3),loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=["accuracy"])

6.4 训练模型

history=model.fit(x_train,y_train,epochs=5,batch_size=32)

7. tf.data 数据管道

tf.data用来高效构建数据输入管道,常用于训练集、验证集和大规模数据读取。

7.1 从 Tensor 创建数据集

importtensorflowastf x=tf.range(10)ds=tf.data.Dataset.from_tensor_slices(x)foriteminds.take(3):print(item.numpy())

7.2 批量、打乱、预取

ds=tf.data.Dataset.from_tensor_slices((x,x*2))ds=ds.shuffle(10).batch(4).prefetch(tf.data.AUTOTUNE)

7.3 map 处理

defnormalize(x,y):returntf.cast(x,tf.float32)/10.0,y ds=ds.map(normalize)

8. 完整示例一:线性回归

目标:学习y = 3x + 2 + noise

保存为linear_regression_tf.py

importtensorflowastfdefmain():tf.random.set_seed(42)x=tf.linspace(-5.0,5.0,200)x=tf.reshape(x,[-1,1])noise=tf.random.normal(tf.shape(x),stddev=0.5)y=3.0*x+2.0+noise model=tf.keras.Sequential([tf.keras.layers.Dense(1,input_shape=(1,))])model.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=0.05),loss=tf.keras.losses.MeanSquaredError())history=model.fit(x,y,epochs=100,verbose=0)weight,bias=model.layers[0].get_weights()print("weight:",weight[0][0])print("bias:",bias[0])test_x=tf.constant([[10.0]])pred=model(test_x,training=False)print("x=10 prediction:",pred.numpy()[0][0])if__name__=="__main__":main()

训练核心就是:

model.compile(...)model.fit(...)

9. 完整示例二:二分类模型

目标:判断二维点是否落在圆内。

保存为binary_classification_tf.py

importtensorflowastfdefbuild_dataset(n=2000):x=tf.random.uniform([n,2],minval=-2.0,maxval=2.0)radius=tf.sqrt(tf.reduce_sum(tf.square(x),axis=1,keepdims=True))y=tf.cast(radius<1.0,tf.float32)returnx,ydefmain():tf.random.set_seed(0)x,y=build_dataset()ds=tf.data.Dataset.from_tensor_slices((x,y))ds=ds.shuffle(2000).batch(64).prefetch(tf.data.AUTOTUNE)model=tf.keras.Sequential([tf.keras.layers.Dense(32,activation="relu",input_shape=(2,)),tf.keras.layers.Dense(32,activation="relu"),tf.keras.layers.Dense(1)])model.compile(optimizer=tf.keras.optimizers.Adam(1e-3),loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),metrics=[tf.keras.metrics.BinaryAccuracy(threshold=0.0)])model.fit(ds,epochs=20,verbose=1)sample=tf.constant([[0.2,0.3],[1.5,1.5]])logits=model(sample,training=False)probs=tf.sigmoid(logits)print(probs.numpy())if__name__=="__main__":main()

注意:

  • 二分类如果输出一个 logit,损失函数用BinaryCrossentropy(from_logits=True)
  • 不要在最后一层再手动加sigmoid后传给这个损失。

10. 完整示例三:MNIST 图像分类

这是 TensorFlow 入门最经典的例子之一。

保存为mnist_tf.py

importtensorflowastfdefmain():tf.random.set_seed(42)(x_train,y_train),(x_test,y_test)=tf.keras.datasets.mnist.load_data()x_train=x_train.astype("float32")/255.0x_test=x_test.astype("float32")/255.0x_train=x_train[...,tf.newaxis]x_test=x_test[...,tf.newaxis]train_ds=tf.data.Dataset.from_tensor_slices((x_train,y_train))train_ds=train_ds.shuffle(10000).batch(64).prefetch(tf.data.AUTOTUNE)test_ds=tf.data.Dataset.from_tensor_slices((x_test,y_test))test_ds=test_ds.batch(256).prefetch(tf.data.AUTOTUNE)model=tf.keras.Sequential([tf.keras.layers.Conv2D(32,3,activation="relu",input_shape=(28,28,1)),tf.keras.layers.MaxPool2D(),tf.keras.layers.Conv2D(64,3,activation="relu"),tf.keras.layers.MaxPool2D(),tf.keras.layers.Flatten(),tf.keras.layers.Dense(128,activation="relu"),tf.keras.layers.Dropout(0.2),tf.keras.layers.Dense(10)])model.compile(optimizer=tf.keras.optimizers.Adam(1e-3),loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=["accuracy"])model.fit(train_ds,validation_data=test_ds,epochs=5)model.save("mnist_tf_model")print("saved to mnist_tf_model")if__name__=="__main__":main()

11. 保存、加载与推理

11.1 保存模型

model.save("my_model")

11.2 加载模型

loaded=tf.keras.models.load_model("my_model")

11.3 只保存权重

model.save_weights("weights.keras")model.load_weights("weights.keras")

11.4 推理

withtf.device("/CPU:0"):pred=loaded(tf.constant([[1.0,2.0,3.0]]),training=False)print(pred.numpy())

12. GPU、性能与调试

12.1 查看 GPU

print(tf.config.list_physical_devices("GPU"))

12.2 设定显存按需增长

gpus=tf.config.list_physical_devices("GPU")forgpuingpus:tf.config.experimental.set_memory_growth(gpu,True)

12.3 tf.function

tf.function可以把 Python 函数编译成图,常用于提升性能。

@tf.functiondeffast_step(x):returnx*x+1

12.4 调试建议

  • 先用小数据跑通。
  • 先确认 shape 再看精度。
  • 优先检查标签类型和损失函数是否匹配。
  • 遇到问题时先关闭复杂技巧,比如tf.function、混合精度。

13. 常见错误

13.1 shape 不匹配

常见报错:

ValueError: Input 0 of layer ... is incompatible with the layer

先打印:

print(x.shape)print(y.shape)

13.2 分类任务损失函数用错

多分类通常用:

tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)

二分类常用:

tf.keras.losses.BinaryCrossentropy(from_logits=True)

13.3 忘记归一化

图像输入通常要除以 255.0。

13.4 训练和推理模式混用

model(x,training=True)model(x,training=False)

13.5 忘记用float32

很多模型训练默认希望输入是float32

14. 面试常见问题

14.1 TensorFlow 和 Keras 是什么关系?

Keras 是 TensorFlow 里的高层 API,负责快速搭建模型、训练和评估。

14.2tf.Tensortf.Variable有什么区别?

tf.Tensor更像不可变数据,tf.Variable表示可训练参数,梯度通常更新到Variable上。

14.3GradientTape的作用是什么?

它用于记录前向过程并自动计算梯度,是 TensorFlow 的自动求导核心工具。

14.4 为什么分类损失常用from_logits=True

因为直接使用 logits 数值更稳定,避免重复手动做softmaxsigmoid

14.5model.fit()和自定义训练循环有什么区别?

model.fit()简洁,适合常规训练;自定义训练循环更灵活,适合复杂逻辑和研究实验。

14.6tf.data有什么用?

它用于构建高效的数据输入管道,支持批处理、打乱、映射、并行和预取。

14.7model.save()保存了什么?

通常会保存模型结构、权重和必要的配置,方便之后直接加载推理。

14.8training=Truetraining=False为什么重要?

Dropout、BatchNorm 等层在训练和推理时行为不同。

14.9 为什么要先看 shape?

深度学习里很多错误本质上都是张量形状不对,先看 shape 往往最快。

14.10 TensorFlow 适合什么场景?

适合快速原型、模型训练、图像/文本/结构化数据任务,以及部署到多种设备。

15. 建议练习

练习 1:Tensor 基础

写代码完成:

  • 创建一个[5, 3]的随机 Tensor。
  • 取第一行。
  • 计算每一列平均值。
  • 变成float64

练习 2:改造线性回归

把示例中的真实函数改成:

y=-4.0*x+7.0+noise

观察模型是否能学到接近的参数。

练习 3:改造二分类模型

把二分类模型的隐藏层改成 64、64、32 三层,看看准确率和收敛速度有什么变化。

练习 4:保存后加载

训练完 MNIST 模型后,加载模型并对几张图片做推理。

练习 5:写一个自定义 Dataset

做一个从 CSV 读取特征和标签的数据管道,再接入tf.data.Dataset训练。

16. 参考资料

  • TensorFlow 官方首页:https://www.tensorflow.org/
  • TensorFlow 安装页:https://www.tensorflow.org/install
  • TensorFlow pip 安装页:https://www.tensorflow.org/install/pip
  • TensorFlow 教程首页:https://www.tensorflow.org/tutorials
  • TensorFlow Keras 指南:https://www.tensorflow.org/guide/keras
  • TensorFlow 基础指南:https://www.tensorflow.org/guide/basics
  • TensorFlow 2 Quickstart for beginners:https://www.tensorflow.org/tutorials/quickstart/beginner
http://www.cnnetsun.cn/news/3033760.html

相关文章:

  • Linux命令-pwd(打印当前工作目录)
  • 三分钟带你认识有机溶质转运蛋白(OST)家族
  • AI引发存储危机,苹果Mac、iPad涨价,iPhone 18会跟进吗?
  • 服务周到的牙科诊所如何挑选
  • RocketMQ 从0到1
  • 89.7%恶意IP活不过1个月:金融风控如何用日更离线库应对住宅中继攻击?
  • 市级工程实验室申报条件:
  • 早高峰整层职场集体断网:逐包溯源揪出私接路由器引发的广播风暴祸根
  • 宏观-中观-微观关联模型构建与数据融合方案
  • Grok 4.3大模型应该怎么用?2026 实操步骤、应用场景与注意事项
  • 基因组编辑技术如何实现从“精雕细琢“到“大刀阔斧“的跨越?
  • AI 写代码为什么会错?上下文、测试和反馈循环
  • 微软Intelligent Terminal中登录GitHub Copilot
  • Ubuntu24.04.4安装堡垒机JummpServer
  • 国内最好用协会私域管理系统软件口碑排行榜单:从选型困惑到高效落地的实践路径
  • 电脑自主操作 AI 助手 OpenClaw,全可视化落地实操文档(包含安装包)
  • 【AI产品经理】 第四章 安全合规与边界设计
  • 吴恩达《深度学习》之看懂集束搜索
  • VS Code 文件调用路径问题
  • 九九云环境智能精准喷氨系统,把脱硝成本压缩到最优区间
  • bond网络问题(印象笔记归档)
  • 【深度评测】AU-60 AI语音模组:智能机器人拾音对讲的终极解决方案
  • 5分钟快速上手:如何使用Ray Adapter将Ray应用迁移到华为昇腾硬件
  • 联想拯救者笔记本性能优化终极指南:Lenovo Legion Toolkit完全掌控
  • OpenClaw 小龙虾 Windows 部署完整教程,10 分钟搭建专属桌面 AI 数字员工(含安装包)
  • Spring-adapter注解详解:@FunctionService和@FunctionHandler使用指南
  • 【awinic inside】腕间长航 精准随行 | 艾为芯助力小米 Watch S5 长效续航精准定位
  • UMDK URMA组件详解:如何实现单边、双边和原子内存操作的终极指南
  • 中国大模型跻身全球AI第一梯队,开源改写中西方竞争规则!
  • 为什么照片骗不了Windows Hello?红外人脸识别的硬核安全密码