আমি rand৪ টি এলোমেলোভাবে উত্পাদিত ডেটা পয়েন্টগুলিতে একটি একক পার্সপেট্রন (1000 ইনপুট ইউনিট, 1 আউটপুট, কোনও আড়াল স্তর নেই) প্রশিক্ষণ দেওয়ার চেষ্টা করছি। আমি অ্যাডাম অপ্টিমাইজার ব্যবহার করে পাইটোর্চ ব্যবহার করছি:
import torch
from torch.autograd import Variable
torch.manual_seed(545345)
N, D_in, D_out = 64, 1000, 1
x = Variable(torch.randn(N, D_in))
y = Variable(torch.randn(N, D_out))
model = torch.nn.Linear(D_in, D_out)
loss_fn = torch.nn.MSELoss(size_average=False)
optimizer = torch.optim.Adam(model.parameters())
for t in xrange(5000):
y_pred = model(x)
loss = loss_fn(y_pred, y)
print(t, loss.data[0])
optimizer.zero_grad()
loss.backward()
optimizer.step()
প্রাথমিকভাবে, ক্ষতিটি দ্রুত হ্রাস পায়, যেমনটি প্রত্যাশিত:
(0, 91.74887084960938)
(1, 76.85824584960938)
(2, 63.434078216552734)
(3, 51.46927261352539)
(4, 40.942893981933594)
(5, 31.819372177124023)
প্রায় 300 টি পুনরাবৃত্তি, ত্রুটি শূন্যের কাছাকাছি পৌঁছেছে:
(300, 2.1734419819452455e-12)
(301, 1.90354676465887e-12)
(302, 2.3347573874232808e-12)
এটি কয়েক হাজার পুনরাবৃত্তির জন্য চলে। তবে, দীর্ঘ সময় প্রশিক্ষণের পরেও ত্রুটিটি আবার বাড়তে শুরু করে:
(4997, 0.002102422062307596)
(4998, 0.0020302983466535807)
(4999, 0.0017039275262504816)
ইহা কি জন্য ঘটিতেছে?