# 使用PyTorch处理多维特征输入的完美指南

## 🥦前期的回顾与准备

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()

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 激活函数的实例，用于在神经网络的正向传播中引入非线性。

## 🥦代码实现

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数据集
# 将数据集拆分为特征和目标
X = diabetes.data  # 特征
y = diabetes.target  # 目标
# 数据预处理
X = (X - np.mean(X, axis=0)) / np.std(X, axis=0)  # 特征标准化
# 拆分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 转换为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(), lr=0.01)
# 训练模型
num_epochs = 1000
for epoch in range(num_epochs):
# 前向传播
outputs = model(X_train)
loss = criterion(outputs, y_train)
# 反向传播和优化
loss.backward()
optimizer.step()
if (epoch + 1) % 100 == 0:
print(f'Epoch [{epoch + 1}/{num_epochs}], Loss: {loss.item():.4f}')
# 在测试集上进行预测
model.eval()
y_pred = model(X_test)
# 计算性能指标
mse = nn.MSELoss()(y_pred, y_test)
print(f"均方误差 (MSE): {mse.item():.4f}")

## 🥦总结

|

142 0
|

PyTorch实现随机傅里叶特征映射的示例代码

241 0
|

301 0
|

163 0
|

【PyTorch基础教程7】多维特征input

145 0
|
1月前
|

Pytorch实现手写数字识别 | MNIST数据集（CNN卷积神经网络）
Pytorch实现手写数字识别 | MNIST数据集（CNN卷积神经网络）
102 0
|
10天前
|

【从零开始学习深度学习】49.Pytorch_NLP项目实战：文本情感分类---使用循环神经网络RNN
【从零开始学习深度学习】49.Pytorch_NLP项目实战：文本情感分类---使用循环神经网络RNN
19 1
|
10天前
|

【从零开始学习深度学习】30. 神经网络中批量归一化层（batch normalization）的作用及其Pytorch实现
【从零开始学习深度学习】30. 神经网络中批量归一化层（batch normalization）的作用及其Pytorch实现
14 1
|
10天前
|

【从零开始学习深度学习】36. 门控循环神经网络之长短期记忆网络（LSTM）介绍、Pytorch实现LSTM并进行训练预测
【从零开始学习深度学习】36. 门控循环神经网络之长短期记忆网络（LSTM）介绍、Pytorch实现LSTM并进行训练预测
15 2
|
10天前
|

【从零开始学习深度学习】16. Pytorch中神经网络模型的构造方法：Module、Sequential、ModuleList、ModuleDict的区别
【从零开始学习深度学习】16. Pytorch中神经网络模型的构造方法：Module、Sequential、ModuleList、ModuleDict的区别
18 1