在不同的维度上使用不同比例的自动编码器



Q1,我正在尝试实现自动编码器,我有这样的数据:

  1. 800 300 1 100000-0.1
  2. 789 400 1.6 100500-0.4
  3. 804 360 1.2 100420-0.2

  4. 。。。。

我想如何规范这些数据以便进行训练?

Q2,因为我不知道归一化的方法,所以我跳过它,只将原始数据应用到自动编码器进行训练,但经过几次迭代后,梯度变为Nan,这是代码。

BATCH_SIZE=1
BETA=3
INPUT=89
HIDDEN=64 
EPOCHS=1
LR=0.01
RHO=0.1
raw_data=Loader('test.csv')
print(np.shape(raw_data))
raw_data=torch.Tensor(raw_data)
train_dataset=Data.TensorDataset(data_tensor=raw_data,target_tensor=raw_data)
train_loader=Data.DataLoader(dataset=train_dataset,batch_size=BATCH_SIZE,shuffle=True)
model=SparseAutoEncoder(INPUT,HIDDEN)
optimizer=optim.Adam(model.parameters(),lr=LR)
loss_func=nn.MSELoss()

for epoch in range(EPOCHS):
for b_index,(x,_) in enumerate(train_loader):
x=x.view(-1,INPUT)
x=Variable(x)
encoded,decoded=model(x)
loss=loss_func(decoded,x)
optimizer.zero_grad()
loss.backward()
optimizer.step()
print("Epoch: [%3d], Loss: %.4f" %(epoch + 1, loss.data))

raw_data的形状为(2700,89(,每行包含89个维度,具有不同的值比例(如Q1所述(。

获取每个维度上数据的平均值和标准差(并保留这些值(,并将比例应用于数据。

当您有新数据时,请重用这些数据来扩展新数据。

随着数据中尺度的变化,你会得到非常糟糕的拟合(基本上尺度越大,拟合越好,越小,最差(。

最新更新