07.处理多维特征的输入

回归的值属于实数,而分类的属于离散的值

一、处理多维特征的输入

多维数据的 行: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()

结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值