深度学习实践 处理多维特征的输入

这里写目录标题

  • 一、处理多维特征的输入
  • 二、代码:

一、处理多维特征的输入

多维数据的 行:record 列:feature

当输入x变成n维的向量,让其和n维的权重w作内积,内积之后转置。

深度学习实践 处理多维特征的输入_第1张图片 深度学习实践 处理多维特征的输入_第2张图片

广播:Python/Numpy中的矩阵向量的广播(Broadcasting)特性

矩阵和向量:

self.linear = torch.nn.Linear(8, 2) 可以将8维的输入进行空间维度变换,成为2维的输出。

每次空间压缩,需要引入σ(激活函数),进行非线性的空间变换。

深度学习实践 处理多维特征的输入_第3张图片

变换的维度和层数,决定了网络的复杂程度。过程中到底如何变化,即为超参数搜索。

深度学习实践 处理多维特征的输入_第4张图片

二、代码:

import torch
import numpy as np
import matplotlib.pyplot as plt

xy = np.loadtxt('diabetes.csv.gz', delimiter=',', dtype=np.float32)
x_data = torch.from_numpy(xy[ : ,  :-1])    # 第一个:的前后参数缺省,表示读取所有行 第二个:指从开始列到倒数第二列
y_data = torch.from_numpy(xy[ : , [-1]])    # [-1]使向量转换为矩阵  from_numpy可以生成tensor
# test = np.loadtxt('test.csv.gz', delimiter='', dtype=np.float32)


# print(y_data)

# Define Model
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)
        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()

# Construct Loss and Optimizer
criterion = torch.nn.BCELoss(reduction = 'mean')
optimizer = torch.optim.SGD(model.parameters(), lr = 0.1)

epoch_list = []
loss_list = []
# Training Cycle
for epoch in range(100):
    # Forward
    y_pred = model(x_data)
    loss = criterion(y_pred, y_data)
    epoch_list.append(epoch)
    loss_list.append(loss.item())
    print(epoch, loss.item())
    # Backward
    optimizer.zero_grad()
    loss.backward()
    # Update
    optimizer.step()

plt.plot(epoch_list, loss_list)
plt.ylabel('loss_list')
plt.xlabel('epoch_list')
plt.show()

参考:
PyTorch 深度学习实践 第7讲
《PyTorch深度学习实践》完结合集

你可能感兴趣的:(深度学习实践,深度学习,python,pytorch)