Изменение формы тензора в pytorch приводит к странному поведениюPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Изменение формы тензора в pytorch приводит к странному поведению

Сообщение Anonymous »

Я просматривал https://github.com/parrt/fundamentals-o ... etes.ipynb в качестве упражнения, но забыл изменить форму тензоров. в этих строках
y_train = torch.tensor(y_train).float().reshape(-1,1) # column vector
y_test = torch.tensor(y_test).float().reshape(-1,1)

И моя модель просто перестала учиться на раннем этапе, потери не улучшались в процессе обучения. Кто-нибудь понимает, каков эффект этих вызовов reshape(), как мне избежать этой ошибки в будущем?
Полный код и комментарии ниже:
def train1(model, X_train, X_test, y_train, y_test,
learning_rate = .5, nepochs=2000):
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)
history = [] # track training and validation loss
for epoch in range(nepochs+1):
y_pred = model(X_train)
loss = torch.mean((y_pred - y_train)**2)
y_pred_test = model(X_test)
loss_test = torch.mean((y_pred_test - y_test)**2)
history.append((loss, loss_test))
if epoch % (nepochs//10) == 0:
print(f"Epoch {epoch:4d} MSE train loss {loss:12.3f} test loss {loss_test:12.3f}")

optimizer.zero_grad()
loss.backward() # autograd computes w1.grad, b1.grad, ...
optimizer.step()
return torch.tensor(history)

ncols = X_train.shape[1]
n_neurons = 150
model2 = torch.nn.Sequential(
torch.nn.Linear(ncols, n_neurons),
torch.nn.ReLU(),
torch.nn.Linear(n_neurons, 1)
)

d = load_diabetes()
df = pd.DataFrame(d.data, columns=d.feature_names)
df['disease'] = d.target # "quantitative measure of disease progression one year after baseline"
print (df.head(3))

np.random.seed(1) # set a random seed for consistency across runs
n = len(df)
X = df.drop('disease',axis=1).values
y = df['disease'].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20)

m = np.mean(X_train,axis=0)
std = np.std(X_train,axis=0)
X_train = (X_train-m)/std
X_test = (X_test-m)/std

X_train = torch.tensor(X_train).float()
X_test = torch.tensor(X_test).float()

# HERE !!!!!!
# without reshape: train loss doesn't emprove beyond epoch 800, loss=6074
# y_train = torch.tensor(y_train).float()
# y_test = torch.tensor(y_test).float()
# print (y_train.shape, y_test.shape) # torch.Size([353]) torch.Size([89])

# with reshape, train loss goes down to 7
y_train = torch.tensor(y_train).float().reshape(-1,1) # column vector
y_test = torch.tensor(y_test).float().reshape(-1,1)
print (y_train.shape, y_test.shape) # torch.Size([353]) torch.Size([89])

########################################################################

history = train1(model2, X_train, X_test, y_train, y_test,
learning_rate=.02, nepochs=8000)

# Epoch 0 MSE train loss 29603.037 test loss 26998.922
# Epoch 800 MSE train loss 2133.840 test loss 3174.325
# Epoch 1600 MSE train loss 1423.420 test loss 4316.454
# Epoch 2400 MSE train loss 375.720 test loss 7257.883
# Epoch 3200 MSE train loss 120.477 test loss 9051.368
# Epoch 4000 MSE train loss 57.527 test loss 10240.634
# Epoch 4800 MSE train loss 31.486 test loss 10784.966
# Epoch 5600 MSE train loss 16.044 test loss 11113.780
# Epoch 6400 MSE train loss 8.490 test loss 11283.872
# Epoch 7200 MSE train loss 6.594 test loss 11503.454
# Epoch 8000 MSE train loss 3.513 test loss 11644.484


Подробнее здесь: https://stackoverflow.com/questions/792 ... d-behavior
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Изменение формы тензора в pytorch приводит к странному поведению
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Юникод из строкового литерала и из файла приводит к странному поведению
    Anonymous » » в форуме C++
    0 Ответы
    68 Просмотры
    Последнее сообщение Anonymous
  • Юникод из строкового литерала и из файла приводит к странному поведению
    Anonymous » » в форуме Linux
    0 Ответы
    62 Просмотры
    Последнее сообщение Anonymous
  • Использование Depth FBO для карты теней приводит к странному поведению.
    Anonymous » » в форуме C#
    0 Ответы
    53 Просмотры
    Последнее сообщение Anonymous
  • Использование Depth FBO для карты теней приводит к странному поведению.
    Anonymous » » в форуме C#
    0 Ответы
    46 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»