- 一、处理多维特征的输入
- 二、代码:
多维数据的 行:record 列:feature
当输入x变成n维的向量,让其和n维的权重w作内积,内积之后转置。
广播:Python/Numpy中的矩阵向量的广播(Broadcasting)特性
矩阵和向量:
self.linear = torch.nn.Linear(8, 2) 可以将8维的输入进行空间维度变换,成为2维的输出。
每次空间压缩,需要引入σ(激活函数),进行非线性的空间变换。
变换的维度和层数,决定了网络的复杂程度。过程中到底如何变化,即为超参数搜索。
二、代码: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深度学习实践》完结合集
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)