Pytorch学习 第二周Day 10-11: 损失函数和优化器

Day 10-11: 损失函数和优化器

在这两天的学习中,我深入了解了不同的损失函数和优化器,并通过使用两个流行的深度学习框架,PyTorch和TensorFlow,来对比学习这些概念的实际应用。

损失函数

学习了交叉熵损失、均方误差(MSE)、平均绝对误差(MAE)和Huber损失等常用损失函数。
损失函数在训练过程中用于评估模型的性能,目标是最小化这个损失。
优化器

探讨了随机梯度下降(SGD)、Adam、RMSprop和动量等优化器。
优化器负责更新模型的权重以降低损失。

PyTorch vs TensorFlow
PyTorch:更灵活,允许更细粒度的调整。使用动态计算图,使得在调试时可以更容易地看到每一步的变化。
实现时需要明确定义前向传播过程。
示例代码中展示了如何用PyTorch定义一个简单的神经网络,包括损失函数和优化器的设置。
TensorFlow:具有更全面的生态系统和工具,适合于大规模部署和生产环境。
使用Sequential API可以更快速地搭建模型。
示例代码展示了如何用TensorFlow的Sequential API快速构建和编译一个模型,包括损失函数和优化器的应用。
通过对比学习,我不仅理解了损失函数和优化器的理论概念,还获得了在两个不同框架中实现它们的实践经验。这对于未来根据项目需求选择合适的工具和方法具有重要意义。

代码对比:
PyTorch代码示例

import torch
import torch.nn as nn
import torch.optim as optim

定义一个简单的神经网络

class SimpleNN(nn.Module):
def init(self):
super(SimpleNN, self).init()
self.fc1 = nn.Linear(784, 128) # 假设输入是28x28图像,展平后的大小为784
self.relu = nn.ReLU()
self.fc2 = nn.Linear(128, 10) # 假设有10个类别

def forward(self, x):
    x = self.fc1(x)
    x = self.relu(x)
    x = self.fc2(x)
    return x

实例化模型、损失函数和优化器

model = SimpleNN()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

训练步骤的示例

optimizer.zero_grad() # 清除之前的梯度

output = model(data) # 得到输出

loss = criterion(output, target) # 计算损失

loss.backward() # 反向传播

optimizer.step() # 更新权重

TensorFlow代码示例

import tensorflow as tf
from tensorflow.keras.layers import Dense
from tensorflow.keras.models import Sequential

定义一个简单的神经网络

model = Sequential([
Dense(128, activation=‘relu’, input_shape=(784,)), # 假设输入是28x28图像,展平后的大小为784
Dense(10, activation=‘softmax’) # 假设有10个类别
])

编译模型,指定损失函数和优化器

model.compile(optimizer=‘adam’,
loss=‘sparse_categorical_crossentropy’,
metrics=[‘accuracy’])

训练模型的示例

model.fit(data, target, epochs=10, batch_size=32)

你可能感兴趣的:(pytorch,学习,人工智能,tensorflow2,python)