1、创建一个lstm网络
class Lstm(nn.Model):
def __init__(self):
super(Lstm,self).__init__()
# input_size:输入数据的特征维度
self.layer1 = nn.Sequential(nn.LSTM(intput_size,hidden_size,batch_first=True))
self.layer2 = nn.Sequential(nn.Dropout(0.25))
self.layer3 = nn.Sequential(nn.Linear(128,1),
nn.Sigmoid())
def forward(self,x):
# out shape:(batch_size,time_step,output_size)
out,_ = self.layer1(x)
out = self.layer2(out[:,-1,:])
out = self.layer3(out)
return out
2、选择损失函数、优化函数
input_size = 128
# 二分类问题,采用BECLoss函数
model = lstm()
criterion = nn.BECLoss()
optimizer = torch.optim.Adam(model.parameters(),lr =0.01)
for epoch in range(epochs):
for train,label in train_data:
trian_set = train.reshape(-1,1,input_size)
train_tensor = torch.from_numpy(train_set)
train_tensor32 = train_tensor.to(torch.float32)
label_tensor = torch.from_numpy(label)
label_float32 = label_tensor.to(torch.float32)
label_float32_1 = label_float32.reshape(-1, 1)
output = model(train_tensor32)
loss = criterion(output,label_float32_1)
#测试
test_set = test.reshape(-1,1,input_size)
test_tensor = torch.from_numpy(test_set)
test_tensor32 = test_tensor.to(torch.float32)
lstm_proba = model(test_tensor32)
# 输出的为概率
lstm_pre = lstm_proba.detach()