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

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

算法介绍

在这里插入图片描述

之前输入数据都是一维输入,一维输出,这里以这个数据为案例,输入8维的数据,这8维度分别代表8个特征,Y代表好坏情况

数学公式

在这里插入图片描述
在这里插入图片描述

代码

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

# prepare dataset
xy = np.loadtxt('PyTorch_exercise\diabetes.csv.gz', delimiter=',', dtype=np.float32)
x_data = torch.from_numpy(xy[:, :-1])  # 第一个‘:’是指读取所有行,第二个‘:’是指从第一列开始,最后一列不要
y_data = torch.from_numpy(xy[:, [-1]])  # [-1] 最后得到的是个矩阵


# 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维,x有8个特征
        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))  # y hat
        return x


model = Model()

# construct loss and optimizer
# criterion = torch.nn.BCELoss(size_average = True)
criterion = torch.nn.BCELoss(reduction='mean')
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)

epoch_list = []
loss_list = []
# 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()

结果分析

0 0.7374240756034851
1 0.7286046743392944
2 0.720624566078186
3 0.7134066224098206
4 0.7068801522254944
5 0.7009800672531128
6 0.6956475377082825
7 0.6908284425735474
8 0.6864737272262573
9 0.6825390458106995
10 0.6789836883544922
11 0.6757713556289673
12 0.6728686690330505
13 0.6702457070350647
14 0.6678754091262817
15 0.665733277797699
16 0.6637970209121704
17 0.6620467305183411
18 0.6604644656181335
19 0.6590337157249451
20 0.6577399373054504
21 0.6565698981285095
22 0.6555115580558777
23 0.6545541286468506
24 0.6536878347396851
25 0.6529038548469543
26 0.6521943211555481
27 0.6515522003173828
28 0.6509708166122437
29 0.6504444479942322
30 0.6499676704406738
31 0.6495358347892761
32 0.6491447687149048
33 0.6487904191017151
34 0.6484694480895996
35 0.6481783986091614
36 0.6479147672653198
37 0.647675633430481
38 0.6474589109420776
39 0.647262454032898
40 0.6470841765403748
41 0.6469224691390991
42 0.6467759013175964
43 0.6466427445411682
44 0.6465219855308533
45 0.6464123129844666
46 0.6463128328323364
47 0.6462224721908569
48 0.6461403965950012
49 0.6460658311843872
50 0.6459981203079224
51 0.6459364891052246
52 0.6458805203437805
53 0.6458296775817871
54 0.6457833647727966
55 0.6457412838935852
56 0.6457029581069946
57 0.6456679701805115
58 0.6456361413002014
59 0.6456071734428406
60 0.6455807685852051
61 0.6455566883087158
62 0.6455346345901489
63 0.6455145478248596
64 0.6454962491989136
65 0.6454795002937317
66 0.6454641222953796
67 0.6454500555992126
68 0.6454371809959412
69 0.6454253792762756
70 0.6454145312309265
71 0.645404577255249
72 0.6453953385353088
73 0.6453868746757507
74 0.6453790664672852
75 0.6453719735145569
76 0.6453652381896973
77 0.6453590393066406
78 0.6453533172607422
79 0.6453480124473572
80 0.6453430652618408
81 0.6453384757041931
82 0.6453341245651245
83 0.6453300714492798
84 0.6453263163566589
85 0.6453227400779724
86 0.6453193426132202
87 0.6453161239624023
88 0.6453131437301636
89 0.6453103423118591
90 0.6453076004981995
91 0.6453049778938293
92 0.6453025341033936
93 0.6453002095222473
94 0.6452978849411011
95 0.6452957391738892
96 0.6452935934066772
97 0.6452915072441101
98 0.6452895402908325
99 0.6452876925468445

在这里插入图片描述

因本人学的不是很深,所以有的可能没有写清楚,还请见谅

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Keras LSTM是一种常用于处理多维输入输出的深度学习模型。在多维输入输出案例中,我们通常需要处理具有多个时间步和多个特征的数据。 首先,我们需要定义一个LSTM模型。我们可以使用Keras的Sequential模型,并添加一个或多个LSTM层作为模型的主体。对于多维输入,我们需要确保输入数据的形状正确,它应该是一个三维数组,即(样本数,时间步长,特征数)。 例如,如果我们有一个样本数为100,时间步长为10,特征数为5的数据集,我们可以使用以下代码来定义LSTM模型: ```python from keras.models import Sequential from keras.layers import LSTM, Dense model = Sequential() model.add(LSTM(32, input_shape=(10, 5))) model.add(Dense(1)) ``` 在上面的代码中,我们定义了一个包含32个LSTM单元的LSTM层,输入数据的形状为(10,5)。我们还添加了一个全连接层作为模型的输出层。 接下来,我们需要编译模型,并选择适当的损失函数和优化器。根据具体问题的特点,我们可以选择不同的损失函数,如平均绝对误差或均方误差,并选择合适的优化器,如随机梯度下降或Adam。 ```python model.compile(loss='mean_squared_error', optimizer='adam') ``` 然后,我们可以使用训练数据来训练模型。训练数据应该是一个三维数组,具有相同的形状(样本数,时间步长,特征数)。我们可以使用`fit()`函数来进行训练。 ```python model.fit(X_train, y_train, epochs=10, batch_size=32) ``` 在上面的代码中,`X_train`是训练数据的输入(多维数组),`y_train`是训练数据的输出,`epochs`表示训练的轮数,`batch_size`表示每个批次的样本数。 最后,我们可以使用训练好的模型对新数据进行预测。预测数据的形状应该与训练数据的形状相同。我们可以使用`predict()`函数来获取模型的预测结果。 ```python y_pred = model.predict(X_test) ``` 上述就是使用Keras LSTM处理多维输入输出案例的基本流程。通过适当的数据预处理、模型定义和训练,我们可以构建一个强大的深度学习模型来解决多维输入输出问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

温柔了岁月.c

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值