为什么不自己做购物网站,浏览器网页版在线使用,那块做微信平台网站,深圳外贸企业网站建设目标#xff1a;
实现一个简单的二分类模型的训练过程#xff0c;通过模拟数据集进行训练和优化#xff0c;训练目标是使模型能够根据输入特征正确分类数据。 演示:
1.通过PyTorch生成了一个模拟的二分类数据集#xff0c;包括特征矩阵data_x和对应的标签数据data_y。标签…目标
实现一个简单的二分类模型的训练过程通过模拟数据集进行训练和优化训练目标是使模型能够根据输入特征正确分类数据。 演示:
1.通过PyTorch生成了一个模拟的二分类数据集包括特征矩阵data_x和对应的标签数据data_y。标签数据通过基于特征的线性组合生成并转换成独热编码的形式。
import torch
# 从torch库中导入神经网络模块nn用于构建神经网络模型
from torch import nn
# 导入torch.nn模块中的functional子模块可用于访问各种函数例如激活函数
import torch.nn.functional as Fn_item 1000
n_feature 2
learning_rate 0.01
epochs 100# 生成一个模拟的数据集其中包括一个随机生成的特征矩阵data_x和相应生成的标签数据data_y。标签数据通过基于特征的线性组合生成并且转换成独热编码的形式。# 设置随机数生成器的种子为123通过设置随机种子我们可以确保在每次运行代码时生成的随机数相同这对于结果的可重现性非常重要。
torch.manual_seed(123)
# 生成一个随机数矩阵data_x其中包含n_item行和n_feature列。矩阵中的元素是从标准正态分布均值为0标准差为1中随机采样的。
data_x torch.randn(size(n_item, n_feature)).float()
# torch.where(...): 根据条件返回两个张量中相应位置的值。如果条件成立将为0否则为1。 long(): 用于将张量转换为Long型数据类型。
data_y torch.where(torch.subtract(data_x[:, 0]*0.5, data_x[:, 1]*1.5)0.02 0, 0, 1).long()
# 将标签数据data_y转换为独热编码形式即将每个标签转换为一个相应长度的独热向量
data_y F.one_hot(data_y)# print(data_x)
# print(data_y) 2.定义了一个简单的二分类模型BinaryClassificationModel包含一个单层感知器Single Perceptron结构其中使用了一个线性层和sigmoid激活函数用于将输入特征映射到概率空间。
# 定义了一个简单的二分类模型采用单层感知器的结构包含一个线性层和sigmoid激活函数用于将输入特征映射到概率空间。这样的模型可以用来对数据集进行二分类任务的预测。# 定义了一个名为BinaryClassificationModel的类其继承自nn.Module类这意味着这个类是一个PyTorch模型。
class BinaryClassificationModel(nn.Module):def __init__(self, in_feature):# 调用了父类nn.Module的构造函数确保正确初始化模型。super(BinaryClassificationModel, self).__init__()single perception# 这行代码定义了模型的第一层是一个线性层Fully Connected Layer。in_features参数指定输入特征的数量out_features指定输出特征的数量这里设置为2表示二分类问题。biasTrue表示该层包含偏置项。self.layer_1 nn.Linear(in_featuresin_feature, out_features2, biasTrue)# 定义模型前向传播的方法即输入数据x通过模型前向计算得到输出。def forward(self, x):# 输入数据x首先通过定义的线性层self.layer_1进行线性变换然后通过F.sigmoid()函数进行激活函数处理。return F.sigmoid(self.layer_1(x))3.创建了该二分类模型的实例model、使用随机梯度下降SGD优化器opt、以及二分类问题常用的损失函数BCELossBinary Cross Entropy Loss。
4.在训练过程中通过多个epoch和每个样本的批处理在这里是一次处理一个样本计算模型预测输出和真实标签之间的损失值进行反向传播计算梯度并更新模型参数以最小化损失函数。
# 完成对模型的训练过程每个epoch中通过优化器进行参数更新计算损失反向传播更新梯度。最终我们会得到训练过程中每个epoch的损失值并可以观察损失的变化情况。# 创建了一个二分类模型实例model参数n_feature表示输入特征的数量。
model BinaryClassificationModel(n_feature)
# 创建了一个随机梯度下降SGD优化器opt用于根据计算出的梯度更新模型参数。
opt torch.optim.SGD(model.parameters(), lrlearning_rate)
# 创建了一个二分类问题常用的损失函数BCELossBinary Cross Entropy Loss用于衡量模型输出与真实标签之间的差异。
criteria nn.BCELoss()for epoch in range(epochs):# 对每个样本进行训练。for step in range(n_item):x data_x[step]y data_y[step]# 梯度清零避免梯度累加影响优化结果。opt.zero_grad()# 将输入特征x通过模型前向传播得到预测输出y_hat。unsqueeze(0)是因为我们的模型期望输入是(batch_size, n_feature)的形式。y_hat model(x.unsqueeze(0))# 计算预测输出y_hat和真实标签y之间的损失值。loss criteria(y_hat, y.unsqueeze(0).float())# 反向传播计算梯度。loss.backward()# 根据计算出的梯度更新模型参数。opt.step()print(Epoch: %03d, Loss: %.3f % (epoch, loss.item()))
5.打印出每个epoch的序号和损失值用于监控训练过程中损失值的变化情况。