如何解决如何对分组数据使用nn.Embeddings?
我不熟悉Torch,也不熟悉LSTM,我正在为具有以下数据结构的数据集进行时间序列销售预测: Data Structure
我想对位置进行nn.embeddings(因为我读过它就像是一种热编码),因此,不必为每个位置运行一个单独的模型,而是为所有数据运行一个模型。因此,最终结构应该是这样的
我应该将哪些参数传递给nn.embeddings? 鉴于我的数据加载功能如下:
def sliding_windows(data,seq_length):
x = []
y = []
for i in range(len(data)-seq_length-1):
_x = data[i:(i+seq_length)]
_y = data[i+seq_length]
x.append(_x)
y.append(_y)
return np.array(x),np.array(y)
sc = MinMaxScaler()
training_data = sc.fit_transform(training_set)
seq_length = 4
x,y = sliding_windows(training_data,seq_length)
y = (y[:,0]).reshape(y[:,0].shape[0],1)
train_size = int(len(y) * 0.9)
test_size = len(y) - train_size
dataX = Variable(torch.Tensor(np.array(x)))
dataY = Variable(torch.Tensor(np.array(y)))
trainX = Variable(torch.Tensor(np.array(x[0:train_size])))
trainY = Variable(torch.Tensor(np.array(y[0:train_size])))
testX = Variable(torch.Tensor(np.array(x[train_size:len(x)])))
testY = Variable(torch.Tensor(np.array(y[train_size:len(y)])))
,模型如下:
class LSTM(nn.Module):
def __init__(self,num_classes,input_size,hidden_size,num_layers):
super(LSTM,self).__init__()
self.num_classes = num_classes
self.num_layers = num_layers
self.input_size = input_size
self.hidden_size = hidden_size
self.seq_length = seq_length
self.lstm = nn.LSTM(input_size=input_size,hidden_size=hidden_size,num_layers=num_layers,batch_first=True)
self.fc = nn.Linear(hidden_size,num_classes)
def forward(self,x):
h_0 = Variable(torch.zeros(
self.num_layers,x.size(0),self.hidden_size))
c_0 = Variable(torch.zeros(
self.num_layers,self.hidden_size))
# Propagate input through LSTM
ula,(h_out,_) = self.lstm(x,(h_0,c_0))
h_out = h_out.view(-1,self.hidden_size)
out = self.fc(h_out)
return out
最后,训练循环如下:
num_epochs = 1000
learning_rate = 0.008
input_size = 4
hidden_size = 4
num_layers = 1
num_classes = 1
lstm = LSTM(num_classes,num_layers)
criterion = torch.nn.MSELoss() # mean-squared error for regression
optimizer = torch.optim.Adam(lstm.parameters(),lr=learning_rate,weight_decay=0.001)
# Weight_decay to decay the errors == regularization technique
# optimizer = torch.optim.SGD(lstm.parameters(),lr=learning_rate)
# Train the model
for epoch in range(num_epochs):
outputs = lstm(trainX)
optimizer.zero_grad()
# obtain the loss function
loss = criterion(outputs,trainY)
loss.backward()
optimizer.step()
if epoch % 100 == 0:
print("Epoch: %d,loss: %1.5f" % (epoch,loss.item()))
对于预测部分我该怎么办?
预先感谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。