🤵 Author :Horizon John
✨ 编程技巧篇:各种操作小结
🎇 机器视觉篇:会变魔术 OpenCV
💥 深度学习篇:简单入门 PyTorch
🏆 神经网络篇:经典网络模型
💻 算法篇:再忙也别忘了 LeetCode
视频链接:Lecture 07 Multiple_Dimension_Input
文档资料:
//Here is the link:
课件链接:https://pan.baidu.com/s/1vZ27gKp8Pl-qICn_p2PaSw
提取码:cxe4
Multiple_Dimension_Input(多维特征的输入)
概述
在前面我们所说的都是 一维数据 的输入和输出
即:一个输入 X 对应 一个输出 Y
当处理多维数据时,即:多个输入 X 对应 一个输出 Y(如下图所示)
![](https://i-blog.csdnimg.cn/blog_migrate/dd9cbb5d6fa36b0d6eb1228c5efd3f36.png#pic_center)
利用矩阵知识,可以得到下式之间的转变:
N 个 Samples
以及 Mini-Batch
![](https://i-blog.csdnimg.cn/blog_migrate/a03a2811926b10f9322c0ae6dda51ee0.png#pic_center)
激活函数使用的是 Sigmoid :
![](https://i-blog.csdnimg.cn/blog_migrate/e3aaa32d455e7003b749196c0121ec92.png#pic_center)
使用 PyTorch 来构建:
![](https://i-blog.csdnimg.cn/blog_migrate/be61fe39dcf54b51cdd21c5daffd58a3.png#pic_center)
Artificial Neural Network
构建以下 网络模型 对上面所述的 多维数据 进行建模分析:
![](https://i-blog.csdnimg.cn/blog_migrate/6e369cd69ec0c98043a8c1014b340d9e.png#pic_center)
Code
# Here is the code:
import numpy as np
import torch
import matplotlib.pyplot as plt
# 1 prepare dataset
xy = np.loadtxt('./diabetes.csv.gz', delimiter=',', dtype=np.float32)
x_data = torch.from_numpy(xy[:, :-1]) # 数组操作,读取至倒数第2行,即:所有的 X 值
y_data = torch.from_numpy(xy[:, [-1]]) # [-1] 为最后一列,需要添加[]使其仍为一个列表,不然输出为元组格式( )
# 2 design model using class
class Model(torch.nn.Module):
def __init__(self):
super(Model, self).__init__()
self.linear1 = torch.nn.Linear(8, 6) # 输入特征 X 维度为8维,输出特征维度为6维
self.linear2 = torch.nn.Linear(6, 4)
self.linear3 = torch.nn.Linear(4, 1) # 最后输出特征的维度为1维对应着 y_hat 的维度
self.sigmoid = torch.nn.Sigmoid() # 激活函数 使用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()
# 3 construct loss and optimizer
criterion = torch.nn.BCELoss(reduction='mean') # loss结果对mini-batch取平均值,即loss / mini-batch
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
epoch_list = []
loss_list = []
# 4 training cycle (forward backward update)
for epoch in range(100):
y_pred = model(x_data)
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()
plt.plot(epoch_list, loss_list)
plt.ylabel('loss')
plt.xlabel('epoch')
plt.show()
函数链接: tensor.from_numpy()
运行结果
![](https://i-blog.csdnimg.cn/blog_migrate/b37bfbe6b5a9db5d9b1ba3174147d593.png#pic_center)
数据集下载: diabetes.csv.gz
提取码:6666
Exercise
使用 ReLU 作为激活函数
![](https://i-blog.csdnimg.cn/blog_migrate/8af70ac8b3682b296df256c67373f20f.png#pic_center)
运行结果
![](https://i-blog.csdnimg.cn/blog_migrate/d6b6a01b81fdd77cdcc204f91e09e79f.png#pic_center)
附录:相关文档资料
PyTorch 官方文档: PyTorch Documentation
PyTorch 中文手册: PyTorch Handbook
《PyTorch深度学习实践》系列链接:
Lecture01 Overview
Lecture02 Linear_Model
Lecture03 Gradient_Descent
Lecture04 Back_Propagation
Lecture05 Linear_Regression_with_PyTorch
Lecture06 Logistic_Regression
Lecture07 Multiple_Dimension_Input
Lecture08 Dataset_and_Dataloader
Lecture09 Softmax_Classifier
Lecture10 Basic_CNN
Lecture11 Advanced_CNN
Lecture12 Basic_RNN
Lecture13 RNN_Classifier