Tensorflow2.0 深度学习运行代码简单教程
之前写过Pytorch,现在工作需求用了Tensorflow2.0的框架,经过这段时间的学习,来总结下。Tensorflow2.0 提供了两种训练模式可以上手。
简单模式
Tensorflow深度学习简单模式,它的基本思想就是将所有的操作进行封装,能简单就简单,所以只要知道输入的数据格式和它的如何接收数据就好啦。
整理数据
# 引入包
import tensorflow as tf
# 做数据,tensorflow有个特别好的机制就是将常见的数据包封装起来
mnist = tf.keras.datasets.mnist
# 这里的x_train, y_train和x_test, y_test具体数据就是普通array类型
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
模型
Tensorflow 的语法总是封装好的,好多API都是封装好的,不用自己写,就是找到有点麻烦
# 这里的模型建立和pytorch的`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)
当然还可以自定义一些回调函数什么的,去控制早停,模型存储,学习率优化等等。
专家模式
专家模式有了好多我们自己可以设置的来一步步看看吧
整理数据
要注意的是Tensorflow 不像Pytorch一样数据是<x, y>
一对一对地输出,它是一列x
和一列y
分开的。
# 引入包
import tensorflow as tf
import numpy as np
from tensorflow.keras.layers import Dense, Flatten, Conv2D
from tensorflow.keras import Model
# 做个最简单的数据
x = [i for i in range(1, 10000)]
y = [(i+1)*(i+2) for i in x]
# 在转变为Tensorflow的Tensor格式之前需要转换为numpy格式
x = np.array(x)
y = np.array(y)
# 这个就类似于Pytorch的Dataset
# batch就是batchsize
# shuffle是打乱数据顺序的程度
# map是可以对提出的数据进行二次加工
# 这里的输入要和from_tensor_slices((x, y))保持一致,输出随自己
def fun(x, y):
return x, x+2, y
# 这里的ds就是Tensorflow存放数据的地方了,类似于Pytorch的DataLoader,可以用for循环打印
ds = tf.data.Dataset.from_tensor_slices((x, y)).batch(1000).shuffle(5000).map(fun)
模型
这个模型也是和Pytorch的差不多,不过需要是重写继承方法call
,就是前向传播。
class MyModel(Model):
def __init__(self):
super(MyModel, self).__init__()
self.d = Dense(32, activation='relu')
self.flatten = Flatten()
self.d1 = Dense(32, activation='relu')
self.d2 = Dense(10)
# 在上面的map中出来的是两个x,这里也用两个参数进行接收
def call(self, x, x1):
x = self.d(x)
x = self.flatten(x)
x1 = self.d1(x1)
return self.d2((x+x1))
# 创建一个模型实例
model = MyModel()
# 再定义优化器和损失函数
loss_object = tf.keras.losses.MeanSquaredError()
optimizer = tf.keras.optimizers.Adam()
# 损失存放
train_loss = tf.keras.metrics.Mean(name='train_loss')
跑起来
一般会定义一个训练方法,在方法前加@tf.function
这句话,可以加快训练速度,但是不能打印数据流动的信息了。
@tf.function
def train_step(x, x1, y):
with tf.GradientTape() as tape:
# training=True is only needed if there are layers with different
# behavior during training versus inference (e.g. Dropout).
predictions = model(x, x1, training=True)
loss = loss_object(y, predictions)
gradients = tape.gradient(loss, model.trainable_variables)
optimizer.apply_gradients(zip(gradients, model.trainable_variables))
train_loss(loss)
# 走几个轮回
EPOCHS = 500
for epoch in range(EPOCHS):
# Reset the metrics at the start of the next epoch
train_loss.reset_states()
for x, x1, y in ds:
train_step(x, x1, y)
print(
f'Epoch {epoch + 1}, '
f'Loss: {train_loss.result()}, '
)
基本就是这样,Tensorflow的API特别丰富,熟悉了好多函数都不用自己写了,还是蛮方便的,但需要了解。
本文来自博客园,作者:赫凯,转载请注明原文链接:https://www.cnblogs.com/heKaiii/p/17137401.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现