回归的值属于实数,而分类的属于离散的值
一、处理多维特征的输入
多维数据的 行:record 列:feature
当输入x变成n
维的向量,让其和n
维的权重w
作内积,内积之后转置
有8个特征的数据集
广播:Python/Numpy中的矩阵向量的广播(Broadcasting)特性
每次空间压缩,需要引入σ(激活函数)
,进行非线性的空间变换。
变换的维度和层数,决定了网络的复杂程度。过程中到底如何变化,即为超参数搜索。
优化过程:
代码部分:
import torch
import numpy as np
import matplotlib.pyplot as plt
# 从文件加载数据集(假设是一个CSV文件)
# 数据集的最后一列作为标签,其余列作为特征
xy = np.loadtxt('diabetes.csv.gz', delimiter=',', dtype=np.float32)
x_data = torch.from_numpy(xy[:, :-1]) # 从数据中选择所有行和所有列,但是最后一列
y_data = torch.from_numpy(xy[:, [-1]]) # 从数据中选择所有行和最后一列作为标签
# 定义模型
class Model(torch.nn.Module):
def __init__(self):
super(Model, self).__init__()
self.linear1 = torch.nn.Linear(8, 6) # 输入维度为8,输出维度为6的线性层
self.linear2 = torch.nn.Linear(6, 4) # 输入维度为6,输出维度为4的线性层
self.linear3 = torch.nn.Linear(4, 1) # 输入维度为4,输出维度为1的线性层
self.sigmoid = torch.nn.Sigmoid()
def forward(self, x):
x = self.sigmoid(self.linear1(x)) # 第一层线性变换后应用Sigmoid激活函数
x = self.sigmoid(self.linear2(x)) # 第二层线性变换后应用Sigmoid激活函数
x = self.sigmoid(self.linear3(x)) # 第三层线性变换后应用Sigmoid激活函数
return x
model = Model()
# 构建损失函数和优化器
criterion = torch.nn.BCELoss(reduction='mean') # 二元交叉熵损失函数,用于度量预测值和实际标签之间的误差
optimizer = torch.optim.SGD(model.parameters(), lr=0.1) # 随机梯度下降优化器,用于更新模型的权重和偏置
epoch_list = []
loss_list = []
# 训练循环
for epoch in range(100):
# 前向传播
y_pred = model(x_data)
loss = criterion(y_pred, y_data)
epoch_list.append(epoch)
loss_list.append(loss.item())
print(epoch, loss.item())
# 反向传播
optimizer.zero_grad()
loss.backward()
# 更新模型参数
optimizer.step()
# 绘制损失曲线
plt.plot(epoch_list, loss_list)
plt.ylabel('损失值')
plt.xlabel('迭代次数')
plt.show()
结果: