处理多维特征的输入
二维记录在pytorch中,行为样本(sample)列为特征(feature)
Anaconda3 数据存储路径数据存储路径:
矩阵向量化
转换成矩阵向量化的计算,可以提高并行运算的能力从而提高整体运算速度。
一般来说,中间层数越多,网络对非线性映射的拟合程度越好,学习能力越强,但是学习能力太强可能会将输入的噪声也学习进去,所以网络学习能力太强也不好,学习应该具有泛化能力。
代码实现
import torch
import numpy as np
import matplotlib.pyplot as plt
from pylab import mpl
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# gz压缩包里的文件名一样,就可以用loadtxt把数据读出来
# delimiter=',' , 以逗号作为分隔符
# dtype=np.float32 , 数据类型为32位的浮点数
xy = np.loadtxt('F:\project\python-learn\diabetes.csv.gz', delimiter=',',
dtype=np.float32)
x_data = torch.from_numpy(xy[:, :-1]) # 所有行,除了最后一列
y_data = torch.from_numpy(xy[:, [-1]]) # 所有行,最后一列 torch.from_numpy把数组转换成张量
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维的![请添加图片描述](https://img-blog.csdnimg.cn/11d8d8eb0c77468480c280e7baff7049.png)
空间变换
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()
criterion = torch.nn.BCELoss(reduction='mean')
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
epoch_list = []
loss_list = []
# 训练
for epoch in range(100):
y_pred = model(x_data) # 并没有做mini-batch
loss = criterion(y_pred, y_data)
print(epoch, loss.item())
epoch_list.append(epoch)
loss_list.append(loss.item())
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 画图
figure = plt.figure("多维特征")
ax = figure.add_subplot()
ax.set_title('多维特征')
ax.set_xlabel("Epoch")
ax.set_ylabel("Loss")
ax.plot(epoch_list, loss_list)
plt.show()