學習速率的設置

先上一段代碼

from __future__ import print_function
import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt

import time
%matplotlib inline
from IPython import display
# Hyper-parameters
input_size = 1
output_size = 1
learning_rate = 0.001

def load_data(filename):
    xys=[]
    with open(filename,'r') as f:
        for line in f:
            xys.append(map(float, line.strip().split()))
        xs, ys = zip(*xys)#解壓,返回二維矩陣式
        return np.asarray(xs), np.asarray(ys)
x_t, y_t=load_data(r'train.txt')
x=[]
y=[]
for i in range(len(x_t)):
    x.append([x_t[i]])
    y.append([y_t[i]])

x_train = np.array(x, dtype=np.float32)
y_train = np.array(y, dtype=np.float32)

plt.scatter(x_train,y_train)
plt.show()
output_1_0.png
class Model(nn.Module):
    def __init__(self):
        super(Model, self).__init__()
        self.linear = nn.Linear(input_size, output_size) # One in and one out

    def forward(self, x):
        y_pred = self.linear(x)
        return y_pred
model = Model()
# model = nn.Linear(input_size, output_size)

criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.00001)  
for epoch in range(50):
    inputs=torch.from_numpy(x_train)
    targets=torch.from_numpy(y_train)
    
    outputs = model(inputs)
    loss = criterion(outputs, targets)

    # Zero gradients
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

    
    if (epoch+1) % 5 == 0:
        predicted = model(torch.from_numpy(x_train)).detach().numpy()
        plt.plot(x_train, y_train, 'ro', label='Original data')
        plt.plot(x_train, predicted, label='Fitted line')
        plt.legend()
        plt.show()
        display.clear_output(wait=True)
        plt.pause(1)
output_4_0.png

這玩意調了一整天,就因為學習速率,剛開始設置的只有0.001,本來感覺夠小了,做出來圖發現擬合線不斷上下跳躍,剛開始還以為是數據讀取的問題,換了隨機數據發現正常。試著調小學習速率,擬合線才出來。第一次遇到……

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容