飞色 网站建设,徐州网站建设市场分析,仿小米论坛的wordpress主题,一个空间建多个网站#x1f497;#x1f497;#x1f497;欢迎来到我的博客#xff0c;你将找到有关如何使用技术解决问题的文章#xff0c;也会找到某个技术的学习路线。无论你是何种职业#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章#xff0c;也欢… 欢迎来到我的博客你将找到有关如何使用技术解决问题的文章也会找到某个技术的学习路线。无论你是何种职业我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章也欢迎在文章下方留下你的评论和反馈。我期待着与你分享知识、互相学习和建立一个积极的社区。谢谢你的光临让我们一起踏上这个知识之旅 文章目录 引言前期的回顾与准备代码实现总结 引言 在机器学习和深度学习领域我们经常会面对具有多维特征输入的问题。这种情况出现在各种应用中包括图像识别、自然语言处理、时间序列分析等。PyTorch是一个强大的深度学习框架它提供了丰富的工具和库可以帮助我们有效地处理这些多维特征输入数据。在本篇博客中我们将探讨如何使用PyTorch来处理多维特征输入数据。 前期的回顾与准备
这里我们采用一组预测糖尿病的数据集如下图 这里的每一行代表一个样本同样的每一列代表什么呢代表一个特征如下图。所以糖尿病的预测由下面这八个特征共同进行决定 按照过去的逻辑回归应该是下图所示的因为这是单特征值 但是现在由单特征值已经转变为多特征值了所以我们需要对每个特征值进行处理如下图 中间的特征值与权重的点乘可以从矩阵的形式进行表现 因为逻辑回归所以还有套一个Sigmoid函数通常情况下我们将函数内的整体成为z(i)
注意 Sigmoid函数是一个按向量方式实现的
下面我们从矩阵相乘的形式进行展示说明可以将一组方程合并为矩阵运算可以想象为拼接哈。这样的目的是转化为并行运算从而实现更快的运行速度。 所以从代码的角度去修改我们只需要改变一下维度就行了
class Model(torch.nn.Module):def __init__(self):super(Model, self).__init__()self.linear torch.nn.Linear(8, 1) self.sigmoid torch.nn.Sigmoid()def forward(self, x):x self.sigmoid(self.linear(x)) return x
model Model()这里的输入维度设置为8就像上图中展示的x一样是N×8形式的矩阵而 y ^ \hat{y} y^是一个N×1的矩阵。 这里我们将矩阵看做是一个空间变换的函数 我们可以从下图很好的展示多层神经网络的变换 从一开始的属于8维变为输出6维再从输入的6维变为输出的4维最后从输入的4维变为输出的1维。 如果从代码的角度去写可以从下面的代码进行实现
class Model(torch.nn.Module):def __init__(self):super(Model, self).__init__()self.linear1 torch.nn.Linear(8, 6) self.linear2 torch.nn.Linear(6, 4) self.linear3 torch.nn.Linear(4, 1) self.sigmoid torch.nn.Sigmoid()def forward(self, x):x self.sigmoid(self.linear1(x)) x self.sigmoid(self.linear2(x)) x self.sigmoid(self.linear3(x)) return x
model Model()这里我说明一下下面这条语句 self.sigmoid torch.nn.Sigmoid()这一行创建了一个 Sigmoid 激活函数的实例用于在神经网络的正向传播中引入非线性。
后面的前向计算就是一层的输出是另一层输入进行传最后将 y ^ \hat{y} y^返回 同时我们的损失函数也没有变化更新函数也没有变化采用交叉熵和梯度下降
刘二大人这里没有使用Mini-Batch进行批量后续的学习应该会更新
代码实现
import torch
import torch.nn as nn
import torch.optim as optim
from sklearn import datasets
from sklearn.model_selection import train_test_split
import numpy as np# 载入Diabetes数据集
diabetes datasets.load_diabetes()# 将数据集拆分为特征和目标
X diabetes.data # 特征
y diabetes.target # 目标# 数据预处理
X (X - np.mean(X, axis0)) / np.std(X, axis0) # 特征标准化# 拆分数据集为训练集和测试集
X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42)# 转换为PyTorch张量
X_train torch.FloatTensor(X_train)
y_train torch.FloatTensor(y_train).view(-1, 1) # 将目标变量转换为列向量
X_test torch.FloatTensor(X_test)
y_test torch.FloatTensor(y_test).view(-1, 1)# 构建包含多个线性层的神经网络模型
class DiabetesModel(nn.Module):def __init__(self, input_size):super(DiabetesModel, self).__init__()self.fc1 nn.Linear(input_size, 64) # 第一个线性层self.fc2 nn.Linear(64, 32) # 第二个线性层self.fc3 nn.Linear(32, 1) # 最终输出线性层def forward(self, x):x torch.relu(self.fc1(x)) # ReLU激活函数x torch.relu(self.fc2(x))x self.fc3(x)return x# 初始化模型
input_size X_train.shape[1]
model DiabetesModel(input_size)# 定义损失函数和优化器
criterion nn.MSELoss() # 均方误差损失
optimizer optim.SGD(model.parameters(), lr0.01)# 训练模型
num_epochs 1000
for epoch in range(num_epochs):# 前向传播outputs model(X_train)loss criterion(outputs, y_train)# 反向传播和优化optimizer.zero_grad()loss.backward()optimizer.step()if (epoch 1) % 100 0:print(fEpoch [{epoch 1}/{num_epochs}], Loss: {loss.item():.4f})# 在测试集上进行预测
model.eval()
with torch.no_grad():y_pred model(X_test)# 计算性能指标
mse nn.MSELoss()(y_pred, y_test)
print(f均方误差 (MSE): {mse.item():.4f})运行结果如下
感兴趣的同学可以使用不同的激活函数一一测试一下
比如我使用tanh函数测试后得到的均方误差就小了许多
此链接是GitHub上的大佬做的可视化函数https://dashee87.github.io/deep%20learning/visualising-activation-functions-in-neural-networks/
总结 这就是使用PyTorch处理多维特征输入的基本流程。当然实际应用中你可能需要更复杂的神经网络结构更大的数据集以及更多的调优和正则化技巧。但这个指南可以帮助你入门如何处理多维特征输入的问题并利用PyTorch构建强大的深度学习模型。希望这篇博客对你有所帮助 挑战与创造都是很痛苦的但是很充实。