人工智能直通车系列34【深度学习基础】(TensorFlow 、 PyTorch 基本概念)
人工智能直通车系列正在连载更新中,更新的内容包括Python 基础与数学基础、机器学习基础、深度学习基础、完整学习资料以及详细解释代码示例,关注我,持续学习。
·
目录
4. 会话(Session)(TensorFlow 1.x 概念)
5. 数据集(Dataset)和数据加载器(DataLoader)
TensorFlow 基本概念
1. 张量(Tensor)
- 定义:TensorFlow 中最基本的数据结构,类似于多维数组。可以表示标量(0 维张量)、向量(1 维张量)、矩阵(2 维张量)以及更高维的数据。例如,一张彩色图像可以表示为一个 3 维张量(高度、宽度、通道数)。
- 代码示例:
import tensorflow as tf
# 创建一个标量张量
scalar = tf.constant(5)
# 创建一个向量张量
vector = tf.constant([1, 2, 3])
# 创建一个矩阵张量
matrix = tf.constant([[1, 2], [3, 4]])
print(scalar)
print(vector)
print(matrix)
2. 计算图(Computational Graph)
- 定义:TensorFlow 使用计算图来表示计算过程。计算图由节点(Node)和边(Edge)组成,节点表示操作(如加法、乘法等),边表示张量的流动。在 TensorFlow 2.x 中,虽然动态图机制(Eager Execution)成为默认模式,但底层仍然有计算图的概念。
- 解释:计算图的好处是可以进行优化,例如并行计算、内存管理等。在训练深度学习模型时,TensorFlow 会根据计算图自动计算梯度,进行反向传播。
3. 变量(Variable)
- 定义:用于存储模型的可训练参数,如神经网络中的权重和偏置。变量可以在训练过程中被更新。
- 代码示例:
import tensorflow as tf
# 创建一个变量
weight = tf.Variable([[0.1], [0.2]], dtype=tf.float32)
print(weight)
4. 会话(Session)(TensorFlow 1.x 概念)
- 定义:在 TensorFlow 1.x 中,会话用于执行计算图。需要在会话中启动计算,并获取结果。在 TensorFlow 2.x 中,由于默认使用动态图机制,会话的概念不再需要。
- TensorFlow 1.x 代码示例:
import tensorflow as tf
# 创建一个简单的计算图
a = tf.constant(2)
b = tf.constant(3)
c = tf.add(a, b)
# 创建会话并运行计算
with tf.Session() as sess:
result = sess.run(c)
print(result)
5. 层(Layer)
- 定义:TensorFlow 提供了各种层的抽象,如全连接层(Dense)、卷积层(Conv2D)等。层是构建神经网络的基本组件,封装了神经元的操作和参数。
- 代码示例:
import tensorflow as tf
from tensorflow.keras.layers import Dense
# 创建一个全连接层
dense_layer = Dense(units=10, activation='relu')
# 假设输入数据
input_data = tf.random.normal([1, 20])
# 前向传播
output = dense_layer(input_data)
print(output)
6. 模型(Model)
- 定义:由多个层组成,用于实现特定的任务,如分类、回归等。可以通过
tf.keras.Model类来构建自定义模型,也可以使用预定义的模型架构。 - 代码示例:
import tensorflow as tf
from tensorflow.keras.layers import Dense
from tensorflow.keras.models import Sequential
# 构建一个简单的顺序模型
model = Sequential([
Dense(10, activation='relu', input_shape=(20,)),
Dense(1, activation='sigmoid')
])
# 打印模型结构
model.summary()
PyTorch 基本概念
1. 张量(Tensor)
- 定义:与 TensorFlow 中的张量类似,是 PyTorch 中最基本的数据结构,用于存储和操作数据。
- 代码示例:
import torch
# 创建一个标量张量
scalar = torch.tensor(5)
# 创建一个向量张量
vector = torch.tensor([1, 2, 3])
# 创建一个矩阵张量
matrix = torch.tensor([[1, 2], [3, 4]])
print(scalar)
print(vector)
print(matrix)
2. 自动求导(Autograd)
- 定义:PyTorch 中的自动求导机制允许在计算过程中自动计算梯度。通过设置张量的
requires_grad=True,PyTorch 会跟踪所有与该张量相关的操作,并在需要时计算梯度。 - 代码示例:
import torch
# 创建一个需要求导的张量
x = torch.tensor([2.0], requires_grad=True)
y = x ** 2
# 计算梯度
y.backward()
print(x.grad) # 输出 4.0
3. 模块(Module)
- 定义:
torch.nn.Module是 PyTorch 中所有神经网络模块的基类。可以通过继承Module类来构建自定义的神经网络模块。 - 代码示例:
import torch
import torch.nn as nn
class SimpleNet(nn.Module):
def __init__(self):
super(SimpleNet, self).__init__()
self.fc = nn.Linear(10, 1)
def forward(self, x):
return self.fc(x)
# 创建模型实例
model = SimpleNet()
print(model)
4. 优化器(Optimizer)
- 定义:用于更新模型的参数,如随机梯度下降(SGD)、Adam 等。优化器会根据计算得到的梯度来更新模型的参数。
- 代码示例:
import torch
import torch.nn as nn
import torch.optim as optim
# 创建模型和优化器
model = nn.Linear(10, 1)
optimizer = optim.SGD(model.parameters(), lr=0.01)
# 模拟训练过程
input_data = torch.randn(1, 10)
output = model(input_data)
loss = nn.MSELoss()(output, torch.randn(1, 1))
# 反向传播和参数更新
optimizer.zero_grad()
loss.backward()
optimizer.step()
5. 数据集(Dataset)和数据加载器(DataLoader)
- 定义:
torch.utils.data.Dataset是一个抽象类,用于表示数据集。torch.utils.data.DataLoader用于批量加载数据,支持数据的打乱、并行加载等操作。 - 代码示例:
import torch
from torch.utils.data import Dataset, DataLoader
# 自定义数据集
class MyDataset(Dataset):
def __init__(self):
self.data = torch.randn(100, 10)
self.labels = torch.randint(0, 2, (100,))
def __len__(self):
return len(self.data)
def __getitem__(self, idx):
return self.data[idx], self.labels[idx]
# 创建数据集和数据加载器
dataset = MyDataset()
dataloader = DataLoader(dataset, batch_size=10, shuffle=True)
# 遍历数据加载器
for data, labels in dataloader:
print(data.shape, labels.shape)
通过理解这些基本概念,你可以使用 TensorFlow 或 PyTorch 构建和训练各种深度学习模型。
更多推荐
所有评论(0)