《PyTorch深度学习实践》03.Multiple Dimension Input

Nannan Lv5

《PyTorch深度学习实践》.Multiple Dimension Input

1.Diabetes Dataset

image-20240714141820159

2. Multiple Dinension Logistic Regression Model

image-20240714143340666

如果是n维的输入,我们就让它和n维的权重做内积。

image-20240714143608197

接下来让我们看一下mini-batch的情况(N samples)

转化成向量化的运算(提高并行运算的能力):image-20240714144037298

code:

image-20240714144203765

如果我们想要多层怎么做呢?

先看一层的情况,我们输入是8维,输出是1维度,写作

image-20240714144443829

如果我写成行不行呢?但是你会问,我结果不应该是一维的吗?怎么办?

其实没有关系,我们再接上一层(2,1)的进行降维即可:

image-20240714144818225

再来看看下面这个呢?

我们可以从8维到6维,6维到2维,2维再到1维这种方式。

也就是说我们可以把维度分步的进行降低。分步降低我们这是一个纯线性的,所以我们还要加上一个激活函数,使得线性变非线性。我们每一次空间压缩都引入一个非线性,那么我们只用调整每一步的线性变换,我们可以通过这样的方式去拟合我们想要的空间变换。

image-20240714145407366

形象地:

image-20240714145634502

但是具体隐藏层选什么比较好,这就是一个典型的超参数搜索。

3.Example

3.1 Prepare Dataset

image-20240714150415503

1
2
x_data = torch.from_numpy(xy[:,:-1]) # :-1表示最后一列不取
y_data = torch.from_numpy(xy[:,[-1]]) # [-1] 表示取最后一列,并且以矩阵形式拿出来,不然拿出来的就是向量了

3.2 Define Model

image-20240714150703470

3.3 Construct Loss and Optimizer

image-20240714151040440

3.4 Training Cycle

image-20240714151112672

4.Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import numpy as np
import torch

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]加中括号拿出来是矩阵,不加是向量

class Model(torch.nn.Model):
def __init__(self):
super(Model,self).__init__()
self.linear1 = torch.nn.linear(8,6)
self.linear2 = torch.nn.linear(6,4)
self.linear3 = torch.nn.linear(4,1)
# 这是nn下的Sigmoid是一个模块没有参数,在function调用的Sigmoid是函数
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.BECLoss(size_average=True)
optimizer = torch.optim.SGD(model.parameters(),lr = 0.1)

for epoch in range(100):
# 前馈
y_pred = model(x_data)
loss = criterion(y_pred, y_data)
print(epoch, loss.item())

# 反馈
optimizer.zero_grad()
loss.backward()

# 更新
optimizer.step()
  • Title: 《PyTorch深度学习实践》03.Multiple Dimension Input
  • Author: Nannan
  • Created at : 2024-07-13 20:52:41
  • Updated at : 2024-09-29 23:20:32
  • Link: https://redefine.ohevan.com/2024/07/13/【实践】03.Multiple Dimension Input/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments