Автоэнкодер с разной шкалой в разных измерениях? - PullRequest
0 голосов
/ 03 декабря 2018

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).

1 Ответ

0 голосов
/ 03 декабря 2018

Получите среднее и стандартное отклонение ваших данных по каждому измерению (и сохраните эти значения) и примените шкалу к вашим данным.

Когда у вас появятся новые данные, используйте их для масштабирования и новых данных.

При таком разбросе масштабов в ваших данных вы получите очень плохое соответствие (в основном, чем больше масштаб, тем лучше соответствие, меньше и хуже).

...