Tutorial 2: PyTorch basics¶
Outline¶
Datasets
Models
Losses
Optimizers
Official resources: * Deep Learning with PyTorch: a 60 Minute Blitz * PyTorch documentation
Here no details, mostly visualization, with linear regression.
Imports¶
[ ]:
import numpy as np
import torch
import matplotlib.pyplot as plt
from matplotlib import colors
plt.rcParams.update({'font.size': 16})
[ ]:
x = torch.rand(20, 5)
x
((x.norm(dim=1) - 1).abs() < 1e-10).float()
tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
Datasets¶
A raw dataset¶
The data are obtained from the model
with \(x\in\mathbb R^{input\_dim}\) and \(y\in\mathbb R^{output\_dim}\).
[ ]:
input_dim = 1
output_dim = 1
A = 2 * np.random.rand(output_dim, input_dim) - 1
b = 2 * np.random.rand(output_dim) - 1
true_model = lambda x: A @ x + b
We get a training set by randomly sampling and noisy observations \begin{align*} &x_i \sim U([-1, 1])\\ &y_i = A x_i + b + \nu_i \end{align*}
[ ]:
n_train = 1000
noise_level = 0.04
# Generate a random set of n_train samples
X_train = np.random.rand(n_train, input_dim)
y_train = np.array([true_model(x) for x in X_train])
# Add some noise
y_train += noise_level * np.random.standard_normal(size=y_train.shape)
[ ]:
if input_dim == output_dim == 1:
fig = plt.figure()
fig.clf()
ax = fig.gca()
ax.plot(X_train, y_train, '.')
ax.grid(True)
ax.set_xlabel('X_train')
ax.set_ylabel('y_train')
PyTorch Dataset¶
[ ]:
#%% Dataset to manage vector to vector data
class VectorialDataset(torch.utils.data.Dataset):
def __init__(self, input_data, output_data):
super(VectorialDataset, self).__init__()
self.input_data = torch.tensor(input_data.astype('f'))
self.output_data = torch.tensor(output_data.astype('f'))
def __len__(self):
return self.input_data.shape[0]
def __getitem__(self, idx):
if torch.is_tensor(idx):
idx = idx.tolist()
sample = (self.input_data[idx, :],
self.output_data[idx, :])
return sample
[ ]:
training_set = VectorialDataset(input_data=X_train, output_data=y_train)
[ ]:
len(training_set)
1000
[ ]:
training_set[10:12]
(tensor([[0.9776],
[0.5333]]), tensor([[0.8377],
[0.8677]]))
Here almost useless, but think about e.g. images.
PyTorch DataLoader¶
[ ]:
batch_size = 120
train_loader = torch.utils.data.DataLoader(training_set,
batch_size=batch_size,
shuffle=True)
The role of batch_size:
[ ]:
for idx, batch in enumerate(train_loader):
print('Batch n. %2d: input size=%s, output size=%s' % (idx+1, batch[0].shape, batch[1].shape))
Batch n. 1: input size=torch.Size([120, 1]), output size=torch.Size([120, 1])
Batch n. 2: input size=torch.Size([120, 1]), output size=torch.Size([120, 1])
Batch n. 3: input size=torch.Size([120, 1]), output size=torch.Size([120, 1])
Batch n. 4: input size=torch.Size([120, 1]), output size=torch.Size([120, 1])
Batch n. 5: input size=torch.Size([120, 1]), output size=torch.Size([120, 1])
Batch n. 6: input size=torch.Size([120, 1]), output size=torch.Size([120, 1])
Batch n. 7: input size=torch.Size([120, 1]), output size=torch.Size([120, 1])
Batch n. 8: input size=torch.Size([120, 1]), output size=torch.Size([120, 1])
Batch n. 9: input size=torch.Size([40, 1]), output size=torch.Size([40, 1])
[ ]:
8 * 120
960
The role of shuffle:
[ ]:
first_batch = []
for epoch in range(2):
for idx, batch in enumerate(train_loader):
if idx == 0:
first_batch.append(batch)
np.c_[X_train[:batch_size], first_batch[0][0].numpy(), first_batch[1][0].numpy()]
array([[0.974855 , 0.97102839, 0.88224959],
[0.20088936, 0.50331622, 0.82345295],
[0.3588191 , 0.93372488, 0.82671511],
[0.31635773, 0.1723303 , 0.21061797],
[0.26437699, 0.83520246, 0.54161078],
[0.26334294, 0.94008124, 0.98018283],
[0.70451306, 0.19887626, 0.96016997],
[0.62485536, 0.42722419, 0.33184233],
[0.81680064, 0.3787725 , 0.34424016],
[0.26399209, 0.74914658, 0.96811068],
[0.97757121, 0.67563111, 0.33945435],
[0.533324 , 0.76730102, 0.5155586 ],
[0.43001335, 0.45874023, 0.45199746],
[0.24557755, 0.99072611, 0.59223241],
[0.0575559 , 0.51748616, 0.08978312],
[0.14739718, 0.8914445 , 0.81213194],
[0.41385026, 0.93936813, 0.25697485],
[0.1030207 , 0.54127955, 0.38445267],
[0.02066877, 0.44041118, 0.93936813],
[0.58362063, 0.99943674, 0.43276 ],
[0.06981526, 0.66758424, 0.32515258],
[0.14331137, 0.05650147, 0.42637974],
[0.42193655, 0.83311635, 0.74914658],
[0.84811793, 0.33808348, 0.35586321],
[0.0189641 , 0.90636659, 0.52024269],
[0.73704536, 0.29632658, 0.26971427],
[0.27161635, 0.69540745, 0.03069129],
[0.48832314, 0.77608848, 0.40542439],
[0.51526818, 0.4440622 , 0.88237053],
[0.16132186, 0.62918919, 0.19699152],
[0.5155586 , 0.34730271, 0.14666671],
[0.58478156, 0.23124492, 0.43424493],
[0.98785734, 0.73400754, 0.76431674],
[0.82934937, 0.28136384, 0.54069471],
[0.78133812, 0.49659568, 0.20088936],
[0.63356466, 0.95077932, 0.19162408],
[0.41486208, 0.92843264, 0.91998875],
[0.16991878, 0.2285466 , 0.14739718],
[0.79862486, 0.19108887, 0.54440981],
[0.11348485, 0.27566925, 0.02066877],
[0.53058885, 0.81712794, 0.13077131],
[0.46555561, 0.71535236, 0.73704535],
[0.90537262, 0.63851529, 0.09674653],
[0.07209757, 0.35959649, 0.86732358],
[0.4429715 , 0.48319075, 0.35832527],
[0.84571465, 0.53246367, 0.16232426],
[0.30218019, 0.65447605, 0.73164684],
[0.19282706, 0.42574444, 0.76095849],
[0.64629518, 0.19162408, 0.62918919],
[0.48141778, 0.67841244, 0.12691697],
[0.48284637, 0.38445267, 0.90531546],
[0.10448172, 0.17072287, 0.44554165],
[0.68613395, 0.45841208, 0.54127955],
[0.23854881, 0.77972329, 0.48141778],
[0.98891487, 0.3227919 , 0.15311468],
[0.10262068, 0.08978312, 0.80341679],
[0.66323465, 0.32799962, 0.4803564 ],
[0.43883588, 0.98925787, 0.0189641 ],
[0.71445548, 0.94664162, 0.27177146],
[0.41307755, 0.81503284, 0.79137987],
[0.45199746, 0.05631886, 0.49857965],
[0.332212 , 0.06867729, 0.92075837],
[0.87890637, 0.22722761, 0.88264573],
[0.67880036, 0.11701425, 0.5830515 ],
[0.39524466, 0.51557332, 0.18987247],
[0.65663108, 0.42868343, 0.51748616],
[0.81712795, 0.70451307, 0.16033462],
[0.99243442, 0.62319732, 0.35287657],
[0.70124457, 0.51199895, 0.26517075],
[0.49627951, 0.38222787, 0.75223863],
[0.09674652, 0.65588737, 0.51843774],
[0.51244907, 0.51188725, 0.93014342],
[0.04139904, 0.41324618, 0.3827664 ],
[0.83661566, 0.73678124, 0.67634982],
[0.0897793 , 0.332212 , 0.70207703],
[0.57658073, 0.40861318, 0.70911026],
[0.41032992, 0.93449783, 0.88450426],
[0.35357984, 0.56973714, 0.34730271],
[0.13408873, 0.23664314, 0.84811795],
[0.59377689, 0.06405374, 0.4395273 ],
[0.7760885 , 0.18300015, 0.04894073],
[0.78109434, 0.93848354, 0.71502668],
[0.65355077, 0.85074848, 0.7340827 ],
[0.99585638, 0.42193654, 0.66309381],
[0.48319076, 0.76793796, 0.56760997],
[0.35287656, 0.68209291, 0.28590071],
[0.88385744, 0.2764878 , 0.64954144],
[0.06001577, 0.22370355, 0.71445549],
[0.11574473, 0.66783738, 0.48827842],
[0.54127957, 0.18701187, 0.61755055],
[0.94209682, 0.67117596, 0.75304455],
[0.78124028, 0.47662666, 0.41636717],
[0.17324309, 0.99298179, 0.07569684],
[0.47196952, 0.03098176, 0.06405374],
[0.8122213 , 0.76838279, 0.43839231],
[0.23124491, 0.28843415, 0.87987804],
[0.79924142, 0.7632069 , 0.88009071],
[0.51787832, 0.35483232, 0.80817389],
[0.40861316, 0.84813797, 0.24848798],
[0.03098176, 0.15202665, 0.64543229],
[0.62636482, 0.55481392, 0.06780223],
[0.76686785, 0.88124359, 0.78733301],
[0.43031192, 0.66070163, 0.56004781],
[0.27619917, 0.5830515 , 0.49622932],
[0.48364738, 0.005606 , 0.49360588],
[0.16253059, 0.36158645, 0.49659568],
[0.36552527, 0.40570346, 0.28195608],
[0.42530521, 0.35403642, 0.11147705],
[0.63091337, 0.56905544, 0.27202424],
[0.21403415, 0.78509218, 0.19753647],
[0.54069473, 0.26046693, 0.88385743],
[0.10491601, 0.36747354, 0.35959649],
[0.97806818, 0.83590823, 0.74486321],
[0.17453117, 0.80944741, 0.98761004],
[0.38019614, 0.39897215, 0.530092 ],
[0.13077131, 0.30865127, 0.13302526],
[0.40778304, 0.22105536, 0.65663105],
[0.83590825, 0.29269406, 0.94683015],
[0.43338311, 0.68397522, 0.97806817],
[0.19753647, 0.79862487, 0.61909825]])
Models¶
We implement a linear model
with \(A\in \mathbb{R}^{input\_dim\times output\_dim}\), \(b\in\mathbb{R}^{output\_dim}\).
[ ]:
import torch.nn as nn
import torch
#%% Linear layer
class LinearModel(nn.Module):
def __init__(self, input_dim, output_dim):
super(LinearModel, self).__init__()
self.input_dim = input_dim
self.output_dim = output_dim
self.linear = nn.Linear(self.input_dim, self.output_dim, bias=True)
def forward(self, x):
out = self.linear(x)
return out
def reset(self):
self.linear.reset_parameters()
[ ]:
model = LinearModel(input_dim, output_dim)
Model inspection¶
[ ]:
print(model)
LinearModel(
(linear): Linear(in_features=1, out_features=1, bias=True)
)
See pytorch.org/docs/stable/nn.html for many other layers.
[ ]:
list(model.parameters())
[Parameter containing:
tensor([[-0.2594]], requires_grad=True), Parameter containing:
tensor([0.2894], requires_grad=True)]
[ ]:
model.linear.weight
Parameter containing:
tensor([[-0.2594]], requires_grad=True)
[ ]:
model.linear.bias
Parameter containing:
tensor([0.2894], requires_grad=True)
The forward method¶
[ ]:
x = torch.randn(5, input_dim)
model.forward(x)
tensor([[-0.0766],
[ 0.5903],
[ 0.3571],
[ 0.4407],
[ 0.2370]], grad_fn=<AddmmBackward0>)
[ ]:
[model.linear.weight @ xx + model.linear.bias for xx in x]
[tensor([-0.0766], grad_fn=<AddBackward0>),
tensor([0.5903], grad_fn=<AddBackward0>),
tensor([0.3571], grad_fn=<AddBackward0>),
tensor([0.4407], grad_fn=<AddBackward0>),
tensor([0.2370], grad_fn=<AddBackward0>)]
[ ]:
if input_dim == output_dim == 1:
fig = plt.figure()
fig.clf()
ax = fig.gca()
ax.plot(training_set.input_data, training_set.output_data, '.')
ax.plot(training_set.input_data, model.forward(training_set.input_data).detach().numpy(), '.')
ax.grid(True)
ax.set_xlabel('X_train')
ax.legend(['y_train', 'model(X_train)'])
Losses¶
The MSE loss¶
The MSE loss is
[ ]:
import torch.nn as nn
loss_fun = nn.MSELoss(reduction='mean')
More at pytorch.org/docs/stable/nn.html#loss-functions
[ ]:
x = torch.tensor(np.array([1, 2, 1]).astype('f'))
z = torch.tensor(np.array([0, 0, 0]).astype('f'))
loss_fun(x, z)
tensor(2.)
Giving a score to the model (parameters) given the training set¶
The loss for one data pair \((x_i, y_i)\) is
The cumulative (average) loss on the training set is
[ ]:
if input_dim == output_dim == 1:
state_dict = model.state_dict()
ww, bb = np.meshgrid(np.linspace(-2, 2, 30), np.linspace(-2, 2, 30))
loss_values = 0 * ww
for i in range(ww.shape[0]):
for j in range(ww.shape[1]):
state_dict['linear.weight'] = torch.tensor([[ww[i, j]]])
state_dict['linear.bias'] = torch.tensor([bb[i, j]])
model.load_state_dict(state_dict)
loss_values[i, j] = loss_fun(model.forward(training_set.input_data), training_set.output_data)
fig = plt.figure(figsize=(10, 8))
fig.clf()
ax = fig.gca()
levels = np.logspace(np.log(np.min(loss_values)), np.log(np.max(loss_values)), 20)
c=ax.contourf(ww, bb, loss_values, levels=levels, norm=colors.LogNorm())
plt.colorbar(c)
ax.plot(A[0], b, 'r*', markersize=10)
ax.set_ylabel('bias')
ax.set_xlabel('weight')
ax.legend(['(A, b)'])
ax.grid(True)
Optimization¶
Goal: minimize the loss given the data:
In this case \(par =\{A, b\}\).
Gradients¶
The model is
With \(input\_dim = output\_dim = 1\) we have \(A:=a\in\mathbb{R},\ b\in\mathbb{R}\).
For a data pair \((x, y)\) the loss is \begin{align*} L(x, y) &= \|model(x)-y\|_2^2\\ &= (model(x)-y)^2\\ &= (a x + b - y)^2\\ &= a^2 x^2 + 2 a b x - 2 a xy + b^2 -2 b y + y^2. \end{align*}
We can compute \begin{align*} \nabla_a L(x, y) &= 2 a x^2 + 2 b x - 2 xy =2 x (a x + b - y)\\ \nabla_b L(x, y) &= 2 a x + 2 b - 2 y = 2 (ax + b - y). \end{align*}
[ ]:
x = torch.randn(1, input_dim)
y = torch.randn(1, output_dim)
model.zero_grad()
loss = loss_fun(model.forward(x), y)
loss.backward()
[ ]:
if input_dim == output_dim == 1:
print(model.linear.weight.grad)
print(2 * x * (model.linear.weight * x + model.linear.bias - y))
print(model.linear.bias.grad)
print(2 * (model.linear.weight * x + model.linear.bias - y))
tensor([[-1.3322]])
tensor([[-1.3322]], grad_fn=<MulBackward0>)
tensor([5.2172])
tensor([[5.2172]], grad_fn=<MulBackward0>)
Handmade optimization¶
[ ]:
if input_dim == output_dim == 1:
num_iter = 200
lr = 0.5 # 0.01
train_hist = {}
train_hist['weight'] = []
train_hist['bias'] = []
model.reset()
state_dict = model.state_dict()
for _ in range(num_iter):
model.zero_grad()
loss = loss_fun(model.forward(training_set.input_data), training_set.output_data)
loss.backward()
w = model.linear.weight.item()
b = model.linear.bias.item()
dw = model.linear.weight.grad.item()
db = model.linear.bias.grad.item()
state_dict['linear.weight'] += torch.tensor([-lr * dw])
state_dict['linear.bias'] += torch.tensor([-lr * db])
model.load_state_dict(state_dict)
train_hist['weight'].append(w)
train_hist['bias'].append(b)
for label in train_hist:
train_hist[label] = np.array(train_hist[label])
[ ]:
if input_dim == output_dim == 1:
fig = plt.figure(figsize=(8, 8))
fig.clf()
ax = fig.gca()
levels = np.logspace(np.log(np.min(loss_values)), np.log(np.max(loss_values)), 20)
ax.contourf(ww, bb, loss_values, levels=levels, norm=colors.LogNorm())
ax.set_xlabel('weight')
ax.set_ylabel('bias')
ax.grid(True)
ax.set_xlim(-2, 2)
ax.set_ylim(-2, 2)
ax.plot(train_hist['weight'], train_hist['bias'], '.-b')
ax.plot(A[0], b, 'r*', markersize=10)
#ax.legend(['optim', '(A, b)'])
Stochastic GD¶
Avoid loading the full training set
Avoid evaluating the model on the full training set
At every step, compute the loss on a batch of data \((X^{(k)}, y^{(k)})\sim (X_{train}, y_{train})\):
\begin{align*} L(X^{(k)}, y^{(k)}) := \sum_{(x, y) \in (X^{(k)}, y^{(k)})} L(x, model(x)). \end{align*}
and then update with this approximated gradient: \begin{align*} par^{(k+1)} &= par^{(k)} - \eta^{(k)} \nabla_{par} L(X^{(k)}, y^{(k)}). \end{align*}
PyTorch optim¶
[ ]:
lr = 0.1
weight_decay = 5e-4
optimizer = torch.optim.Adam(model.parameters(), lr=lr, weight_decay=weight_decay)
More at pytorch.org/docs/stable/optim.html.
[ ]:
n_epochs = 100
[ ]:
train_hist = {}
train_hist['loss'] = []
if input_dim == output_dim == 1:
train_hist['weight'] = []
train_hist['bias'] = []
# Initialize training
model.reset()
model.train()
for epoch in range(n_epochs):
for idx, batch in enumerate(train_loader):
optimizer.zero_grad()
loss = loss_fun(model.forward(batch[0]), batch[1])
loss.backward()
optimizer.step()
train_hist['loss'].append(loss.item())
if input_dim == output_dim == 1:
train_hist['weight'].append(model.linear.weight.item())
train_hist['bias'].append(model.linear.bias.item())
print('[Epoch %4d/%4d] [Batch %4d/%4d] Loss: % 2.2e' % (epoch + 1, n_epochs,
idx + 1, len(train_loader),
loss.item()))
model.eval()
[Epoch 1/ 100] [Batch 1/ 9] Loss: 4.36e+00
[Epoch 1/ 100] [Batch 2/ 9] Loss: 3.77e+00
[Epoch 1/ 100] [Batch 3/ 9] Loss: 3.12e+00
[Epoch 1/ 100] [Batch 4/ 9] Loss: 2.61e+00
[Epoch 1/ 100] [Batch 5/ 9] Loss: 2.13e+00
[Epoch 1/ 100] [Batch 6/ 9] Loss: 1.77e+00
[Epoch 1/ 100] [Batch 7/ 9] Loss: 1.39e+00
[Epoch 1/ 100] [Batch 8/ 9] Loss: 1.06e+00
[Epoch 1/ 100] [Batch 9/ 9] Loss: 8.17e-01
[Epoch 2/ 100] [Batch 1/ 9] Loss: 5.72e-01
[Epoch 2/ 100] [Batch 2/ 9] Loss: 4.09e-01
[Epoch 2/ 100] [Batch 3/ 9] Loss: 2.64e-01
[Epoch 2/ 100] [Batch 4/ 9] Loss: 1.70e-01
[Epoch 2/ 100] [Batch 5/ 9] Loss: 7.79e-02
[Epoch 2/ 100] [Batch 6/ 9] Loss: 4.52e-02
[Epoch 2/ 100] [Batch 7/ 9] Loss: 3.23e-02
[Epoch 2/ 100] [Batch 8/ 9] Loss: 2.99e-02
[Epoch 2/ 100] [Batch 9/ 9] Loss: 4.17e-02
[Epoch 3/ 100] [Batch 1/ 9] Loss: 5.58e-02
[Epoch 3/ 100] [Batch 2/ 9] Loss: 9.14e-02
[Epoch 3/ 100] [Batch 3/ 9] Loss: 1.20e-01
[Epoch 3/ 100] [Batch 4/ 9] Loss: 1.77e-01
[Epoch 3/ 100] [Batch 5/ 9] Loss: 1.93e-01
[Epoch 3/ 100] [Batch 6/ 9] Loss: 2.05e-01
[Epoch 3/ 100] [Batch 7/ 9] Loss: 2.15e-01
[Epoch 3/ 100] [Batch 8/ 9] Loss: 1.98e-01
[Epoch 3/ 100] [Batch 9/ 9] Loss: 2.22e-01
[Epoch 4/ 100] [Batch 1/ 9] Loss: 2.24e-01
[Epoch 4/ 100] [Batch 2/ 9] Loss: 1.84e-01
[Epoch 4/ 100] [Batch 3/ 9] Loss: 1.38e-01
[Epoch 4/ 100] [Batch 4/ 9] Loss: 1.46e-01
[Epoch 4/ 100] [Batch 5/ 9] Loss: 1.18e-01
[Epoch 4/ 100] [Batch 6/ 9] Loss: 1.01e-01
[Epoch 4/ 100] [Batch 7/ 9] Loss: 6.84e-02
[Epoch 4/ 100] [Batch 8/ 9] Loss: 6.57e-02
[Epoch 4/ 100] [Batch 9/ 9] Loss: 5.43e-02
[Epoch 5/ 100] [Batch 1/ 9] Loss: 3.76e-02
[Epoch 5/ 100] [Batch 2/ 9] Loss: 2.32e-02
[Epoch 5/ 100] [Batch 3/ 9] Loss: 1.82e-02
[Epoch 5/ 100] [Batch 4/ 9] Loss: 1.70e-02
[Epoch 5/ 100] [Batch 5/ 9] Loss: 1.38e-02
[Epoch 5/ 100] [Batch 6/ 9] Loss: 1.66e-02
[Epoch 5/ 100] [Batch 7/ 9] Loss: 1.87e-02
[Epoch 5/ 100] [Batch 8/ 9] Loss: 2.39e-02
[Epoch 5/ 100] [Batch 9/ 9] Loss: 2.11e-02
[Epoch 6/ 100] [Batch 1/ 9] Loss: 2.29e-02
[Epoch 6/ 100] [Batch 2/ 9] Loss: 2.94e-02
[Epoch 6/ 100] [Batch 3/ 9] Loss: 2.93e-02
[Epoch 6/ 100] [Batch 4/ 9] Loss: 3.26e-02
[Epoch 6/ 100] [Batch 5/ 9] Loss: 3.15e-02
[Epoch 6/ 100] [Batch 6/ 9] Loss: 3.25e-02
[Epoch 6/ 100] [Batch 7/ 9] Loss: 2.89e-02
[Epoch 6/ 100] [Batch 8/ 9] Loss: 2.36e-02
[Epoch 6/ 100] [Batch 9/ 9] Loss: 2.61e-02
[Epoch 7/ 100] [Batch 1/ 9] Loss: 2.02e-02
[Epoch 7/ 100] [Batch 2/ 9] Loss: 1.84e-02
[Epoch 7/ 100] [Batch 3/ 9] Loss: 1.67e-02
[Epoch 7/ 100] [Batch 4/ 9] Loss: 1.19e-02
[Epoch 7/ 100] [Batch 5/ 9] Loss: 1.22e-02
[Epoch 7/ 100] [Batch 6/ 9] Loss: 1.00e-02
[Epoch 7/ 100] [Batch 7/ 9] Loss: 9.60e-03
[Epoch 7/ 100] [Batch 8/ 9] Loss: 8.42e-03
[Epoch 7/ 100] [Batch 9/ 9] Loss: 8.33e-03
[Epoch 8/ 100] [Batch 1/ 9] Loss: 8.87e-03
[Epoch 8/ 100] [Batch 2/ 9] Loss: 9.08e-03
[Epoch 8/ 100] [Batch 3/ 9] Loss: 8.53e-03
[Epoch 8/ 100] [Batch 4/ 9] Loss: 7.64e-03
[Epoch 8/ 100] [Batch 5/ 9] Loss: 1.00e-02
[Epoch 8/ 100] [Batch 6/ 9] Loss: 7.82e-03
[Epoch 8/ 100] [Batch 7/ 9] Loss: 9.74e-03
[Epoch 8/ 100] [Batch 8/ 9] Loss: 7.11e-03
[Epoch 8/ 100] [Batch 9/ 9] Loss: 8.81e-03
[Epoch 9/ 100] [Batch 1/ 9] Loss: 7.99e-03
[Epoch 9/ 100] [Batch 2/ 9] Loss: 6.81e-03
[Epoch 9/ 100] [Batch 3/ 9] Loss: 7.64e-03
[Epoch 9/ 100] [Batch 4/ 9] Loss: 5.91e-03
[Epoch 9/ 100] [Batch 5/ 9] Loss: 6.59e-03
[Epoch 9/ 100] [Batch 6/ 9] Loss: 5.74e-03
[Epoch 9/ 100] [Batch 7/ 9] Loss: 5.04e-03
[Epoch 9/ 100] [Batch 8/ 9] Loss: 5.53e-03
[Epoch 9/ 100] [Batch 9/ 9] Loss: 2.84e-03
[Epoch 10/ 100] [Batch 1/ 9] Loss: 3.95e-03
[Epoch 10/ 100] [Batch 2/ 9] Loss: 4.69e-03
[Epoch 10/ 100] [Batch 3/ 9] Loss: 4.29e-03
[Epoch 10/ 100] [Batch 4/ 9] Loss: 4.70e-03
[Epoch 10/ 100] [Batch 5/ 9] Loss: 4.75e-03
[Epoch 10/ 100] [Batch 6/ 9] Loss: 3.88e-03
[Epoch 10/ 100] [Batch 7/ 9] Loss: 4.09e-03
[Epoch 10/ 100] [Batch 8/ 9] Loss: 4.17e-03
[Epoch 10/ 100] [Batch 9/ 9] Loss: 4.34e-03
[Epoch 11/ 100] [Batch 1/ 9] Loss: 3.10e-03
[Epoch 11/ 100] [Batch 2/ 9] Loss: 4.02e-03
[Epoch 11/ 100] [Batch 3/ 9] Loss: 3.82e-03
[Epoch 11/ 100] [Batch 4/ 9] Loss: 3.14e-03
[Epoch 11/ 100] [Batch 5/ 9] Loss: 3.04e-03
[Epoch 11/ 100] [Batch 6/ 9] Loss: 3.75e-03
[Epoch 11/ 100] [Batch 7/ 9] Loss: 3.40e-03
[Epoch 11/ 100] [Batch 8/ 9] Loss: 3.04e-03
[Epoch 11/ 100] [Batch 9/ 9] Loss: 2.07e-03
[Epoch 12/ 100] [Batch 1/ 9] Loss: 2.87e-03
[Epoch 12/ 100] [Batch 2/ 9] Loss: 3.41e-03
[Epoch 12/ 100] [Batch 3/ 9] Loss: 2.66e-03
[Epoch 12/ 100] [Batch 4/ 9] Loss: 2.34e-03
[Epoch 12/ 100] [Batch 5/ 9] Loss: 2.19e-03
[Epoch 12/ 100] [Batch 6/ 9] Loss: 2.70e-03
[Epoch 12/ 100] [Batch 7/ 9] Loss: 2.31e-03
[Epoch 12/ 100] [Batch 8/ 9] Loss: 2.30e-03
[Epoch 12/ 100] [Batch 9/ 9] Loss: 2.55e-03
[Epoch 13/ 100] [Batch 1/ 9] Loss: 2.30e-03
[Epoch 13/ 100] [Batch 2/ 9] Loss: 2.16e-03
[Epoch 13/ 100] [Batch 3/ 9] Loss: 1.48e-03
[Epoch 13/ 100] [Batch 4/ 9] Loss: 2.16e-03
[Epoch 13/ 100] [Batch 5/ 9] Loss: 2.47e-03
[Epoch 13/ 100] [Batch 6/ 9] Loss: 2.45e-03
[Epoch 13/ 100] [Batch 7/ 9] Loss: 2.23e-03
[Epoch 13/ 100] [Batch 8/ 9] Loss: 2.49e-03
[Epoch 13/ 100] [Batch 9/ 9] Loss: 1.93e-03
[Epoch 14/ 100] [Batch 1/ 9] Loss: 2.30e-03
[Epoch 14/ 100] [Batch 2/ 9] Loss: 1.79e-03
[Epoch 14/ 100] [Batch 3/ 9] Loss: 1.86e-03
[Epoch 14/ 100] [Batch 4/ 9] Loss: 1.75e-03
[Epoch 14/ 100] [Batch 5/ 9] Loss: 2.04e-03
[Epoch 14/ 100] [Batch 6/ 9] Loss: 1.65e-03
[Epoch 14/ 100] [Batch 7/ 9] Loss: 1.63e-03
[Epoch 14/ 100] [Batch 8/ 9] Loss: 2.14e-03
[Epoch 14/ 100] [Batch 9/ 9] Loss: 2.73e-03
[Epoch 15/ 100] [Batch 1/ 9] Loss: 1.77e-03
[Epoch 15/ 100] [Batch 2/ 9] Loss: 1.96e-03
[Epoch 15/ 100] [Batch 3/ 9] Loss: 1.96e-03
[Epoch 15/ 100] [Batch 4/ 9] Loss: 1.94e-03
[Epoch 15/ 100] [Batch 5/ 9] Loss: 2.00e-03
[Epoch 15/ 100] [Batch 6/ 9] Loss: 1.52e-03
[Epoch 15/ 100] [Batch 7/ 9] Loss: 1.70e-03
[Epoch 15/ 100] [Batch 8/ 9] Loss: 1.56e-03
[Epoch 15/ 100] [Batch 9/ 9] Loss: 1.12e-03
[Epoch 16/ 100] [Batch 1/ 9] Loss: 2.10e-03
[Epoch 16/ 100] [Batch 2/ 9] Loss: 1.43e-03
[Epoch 16/ 100] [Batch 3/ 9] Loss: 1.95e-03
[Epoch 16/ 100] [Batch 4/ 9] Loss: 1.79e-03
[Epoch 16/ 100] [Batch 5/ 9] Loss: 1.60e-03
[Epoch 16/ 100] [Batch 6/ 9] Loss: 1.80e-03
[Epoch 16/ 100] [Batch 7/ 9] Loss: 1.43e-03
[Epoch 16/ 100] [Batch 8/ 9] Loss: 1.43e-03
[Epoch 16/ 100] [Batch 9/ 9] Loss: 1.30e-03
[Epoch 17/ 100] [Batch 1/ 9] Loss: 1.38e-03
[Epoch 17/ 100] [Batch 2/ 9] Loss: 1.83e-03
[Epoch 17/ 100] [Batch 3/ 9] Loss: 1.72e-03
[Epoch 17/ 100] [Batch 4/ 9] Loss: 1.82e-03
[Epoch 17/ 100] [Batch 5/ 9] Loss: 1.95e-03
[Epoch 17/ 100] [Batch 6/ 9] Loss: 1.47e-03
[Epoch 17/ 100] [Batch 7/ 9] Loss: 1.39e-03
[Epoch 17/ 100] [Batch 8/ 9] Loss: 1.49e-03
[Epoch 17/ 100] [Batch 9/ 9] Loss: 1.29e-03
[Epoch 18/ 100] [Batch 1/ 9] Loss: 1.53e-03
[Epoch 18/ 100] [Batch 2/ 9] Loss: 2.22e-03
[Epoch 18/ 100] [Batch 3/ 9] Loss: 1.67e-03
[Epoch 18/ 100] [Batch 4/ 9] Loss: 1.16e-03
[Epoch 18/ 100] [Batch 5/ 9] Loss: 1.73e-03
[Epoch 18/ 100] [Batch 6/ 9] Loss: 1.35e-03
[Epoch 18/ 100] [Batch 7/ 9] Loss: 1.44e-03
[Epoch 18/ 100] [Batch 8/ 9] Loss: 1.62e-03
[Epoch 18/ 100] [Batch 9/ 9] Loss: 1.65e-03
[Epoch 19/ 100] [Batch 1/ 9] Loss: 1.74e-03
[Epoch 19/ 100] [Batch 2/ 9] Loss: 1.66e-03
[Epoch 19/ 100] [Batch 3/ 9] Loss: 1.89e-03
[Epoch 19/ 100] [Batch 4/ 9] Loss: 1.28e-03
[Epoch 19/ 100] [Batch 5/ 9] Loss: 1.58e-03
[Epoch 19/ 100] [Batch 6/ 9] Loss: 1.21e-03
[Epoch 19/ 100] [Batch 7/ 9] Loss: 1.83e-03
[Epoch 19/ 100] [Batch 8/ 9] Loss: 1.46e-03
[Epoch 19/ 100] [Batch 9/ 9] Loss: 1.43e-03
[Epoch 20/ 100] [Batch 1/ 9] Loss: 1.63e-03
[Epoch 20/ 100] [Batch 2/ 9] Loss: 1.61e-03
[Epoch 20/ 100] [Batch 3/ 9] Loss: 1.55e-03
[Epoch 20/ 100] [Batch 4/ 9] Loss: 1.43e-03
[Epoch 20/ 100] [Batch 5/ 9] Loss: 1.38e-03
[Epoch 20/ 100] [Batch 6/ 9] Loss: 1.75e-03
[Epoch 20/ 100] [Batch 7/ 9] Loss: 1.64e-03
[Epoch 20/ 100] [Batch 8/ 9] Loss: 1.54e-03
[Epoch 20/ 100] [Batch 9/ 9] Loss: 1.62e-03
[Epoch 21/ 100] [Batch 1/ 9] Loss: 1.45e-03
[Epoch 21/ 100] [Batch 2/ 9] Loss: 1.75e-03
[Epoch 21/ 100] [Batch 3/ 9] Loss: 1.14e-03
[Epoch 21/ 100] [Batch 4/ 9] Loss: 1.67e-03
[Epoch 21/ 100] [Batch 5/ 9] Loss: 1.66e-03
[Epoch 21/ 100] [Batch 6/ 9] Loss: 1.75e-03
[Epoch 21/ 100] [Batch 7/ 9] Loss: 1.37e-03
[Epoch 21/ 100] [Batch 8/ 9] Loss: 1.69e-03
[Epoch 21/ 100] [Batch 9/ 9] Loss: 1.56e-03
[Epoch 22/ 100] [Batch 1/ 9] Loss: 1.40e-03
[Epoch 22/ 100] [Batch 2/ 9] Loss: 1.38e-03
[Epoch 22/ 100] [Batch 3/ 9] Loss: 1.46e-03
[Epoch 22/ 100] [Batch 4/ 9] Loss: 1.85e-03
[Epoch 22/ 100] [Batch 5/ 9] Loss: 1.52e-03
[Epoch 22/ 100] [Batch 6/ 9] Loss: 1.44e-03
[Epoch 22/ 100] [Batch 7/ 9] Loss: 1.83e-03
[Epoch 22/ 100] [Batch 8/ 9] Loss: 1.61e-03
[Epoch 22/ 100] [Batch 9/ 9] Loss: 1.47e-03
[Epoch 23/ 100] [Batch 1/ 9] Loss: 1.78e-03
[Epoch 23/ 100] [Batch 2/ 9] Loss: 1.49e-03
[Epoch 23/ 100] [Batch 3/ 9] Loss: 1.47e-03
[Epoch 23/ 100] [Batch 4/ 9] Loss: 1.82e-03
[Epoch 23/ 100] [Batch 5/ 9] Loss: 1.59e-03
[Epoch 23/ 100] [Batch 6/ 9] Loss: 1.61e-03
[Epoch 23/ 100] [Batch 7/ 9] Loss: 1.53e-03
[Epoch 23/ 100] [Batch 8/ 9] Loss: 1.33e-03
[Epoch 23/ 100] [Batch 9/ 9] Loss: 1.15e-03
[Epoch 24/ 100] [Batch 1/ 9] Loss: 1.51e-03
[Epoch 24/ 100] [Batch 2/ 9] Loss: 1.24e-03
[Epoch 24/ 100] [Batch 3/ 9] Loss: 1.74e-03
[Epoch 24/ 100] [Batch 4/ 9] Loss: 1.56e-03
[Epoch 24/ 100] [Batch 5/ 9] Loss: 1.55e-03
[Epoch 24/ 100] [Batch 6/ 9] Loss: 1.72e-03
[Epoch 24/ 100] [Batch 7/ 9] Loss: 1.72e-03
[Epoch 24/ 100] [Batch 8/ 9] Loss: 1.43e-03
[Epoch 24/ 100] [Batch 9/ 9] Loss: 1.50e-03
[Epoch 25/ 100] [Batch 1/ 9] Loss: 1.44e-03
[Epoch 25/ 100] [Batch 2/ 9] Loss: 1.66e-03
[Epoch 25/ 100] [Batch 3/ 9] Loss: 1.90e-03
[Epoch 25/ 100] [Batch 4/ 9] Loss: 1.53e-03
[Epoch 25/ 100] [Batch 5/ 9] Loss: 1.44e-03
[Epoch 25/ 100] [Batch 6/ 9] Loss: 1.28e-03
[Epoch 25/ 100] [Batch 7/ 9] Loss: 1.36e-03
[Epoch 25/ 100] [Batch 8/ 9] Loss: 1.84e-03
[Epoch 25/ 100] [Batch 9/ 9] Loss: 1.69e-03
[Epoch 26/ 100] [Batch 1/ 9] Loss: 1.66e-03
[Epoch 26/ 100] [Batch 2/ 9] Loss: 1.39e-03
[Epoch 26/ 100] [Batch 3/ 9] Loss: 1.60e-03
[Epoch 26/ 100] [Batch 4/ 9] Loss: 1.26e-03
[Epoch 26/ 100] [Batch 5/ 9] Loss: 1.88e-03
[Epoch 26/ 100] [Batch 6/ 9] Loss: 1.44e-03
[Epoch 26/ 100] [Batch 7/ 9] Loss: 1.72e-03
[Epoch 26/ 100] [Batch 8/ 9] Loss: 1.53e-03
[Epoch 26/ 100] [Batch 9/ 9] Loss: 1.48e-03
[Epoch 27/ 100] [Batch 1/ 9] Loss: 1.46e-03
[Epoch 27/ 100] [Batch 2/ 9] Loss: 1.64e-03
[Epoch 27/ 100] [Batch 3/ 9] Loss: 1.37e-03
[Epoch 27/ 100] [Batch 4/ 9] Loss: 1.56e-03
[Epoch 27/ 100] [Batch 5/ 9] Loss: 1.82e-03
[Epoch 27/ 100] [Batch 6/ 9] Loss: 1.45e-03
[Epoch 27/ 100] [Batch 7/ 9] Loss: 1.49e-03
[Epoch 27/ 100] [Batch 8/ 9] Loss: 1.75e-03
[Epoch 27/ 100] [Batch 9/ 9] Loss: 1.33e-03
[Epoch 28/ 100] [Batch 1/ 9] Loss: 1.52e-03
[Epoch 28/ 100] [Batch 2/ 9] Loss: 1.83e-03
[Epoch 28/ 100] [Batch 3/ 9] Loss: 1.40e-03
[Epoch 28/ 100] [Batch 4/ 9] Loss: 1.46e-03
[Epoch 28/ 100] [Batch 5/ 9] Loss: 1.66e-03
[Epoch 28/ 100] [Batch 6/ 9] Loss: 1.63e-03
[Epoch 28/ 100] [Batch 7/ 9] Loss: 1.40e-03
[Epoch 28/ 100] [Batch 8/ 9] Loss: 1.63e-03
[Epoch 28/ 100] [Batch 9/ 9] Loss: 1.53e-03
[Epoch 29/ 100] [Batch 1/ 9] Loss: 1.53e-03
[Epoch 29/ 100] [Batch 2/ 9] Loss: 1.60e-03
[Epoch 29/ 100] [Batch 3/ 9] Loss: 1.24e-03
[Epoch 29/ 100] [Batch 4/ 9] Loss: 1.81e-03
[Epoch 29/ 100] [Batch 5/ 9] Loss: 1.74e-03
[Epoch 29/ 100] [Batch 6/ 9] Loss: 1.55e-03
[Epoch 29/ 100] [Batch 7/ 9] Loss: 1.56e-03
[Epoch 29/ 100] [Batch 8/ 9] Loss: 1.41e-03
[Epoch 29/ 100] [Batch 9/ 9] Loss: 1.81e-03
[Epoch 30/ 100] [Batch 1/ 9] Loss: 1.25e-03
[Epoch 30/ 100] [Batch 2/ 9] Loss: 1.33e-03
[Epoch 30/ 100] [Batch 3/ 9] Loss: 1.57e-03
[Epoch 30/ 100] [Batch 4/ 9] Loss: 1.76e-03
[Epoch 30/ 100] [Batch 5/ 9] Loss: 1.65e-03
[Epoch 30/ 100] [Batch 6/ 9] Loss: 1.60e-03
[Epoch 30/ 100] [Batch 7/ 9] Loss: 1.52e-03
[Epoch 30/ 100] [Batch 8/ 9] Loss: 1.70e-03
[Epoch 30/ 100] [Batch 9/ 9] Loss: 1.85e-03
[Epoch 31/ 100] [Batch 1/ 9] Loss: 1.50e-03
[Epoch 31/ 100] [Batch 2/ 9] Loss: 1.36e-03
[Epoch 31/ 100] [Batch 3/ 9] Loss: 1.55e-03
[Epoch 31/ 100] [Batch 4/ 9] Loss: 1.98e-03
[Epoch 31/ 100] [Batch 5/ 9] Loss: 1.51e-03
[Epoch 31/ 100] [Batch 6/ 9] Loss: 1.43e-03
[Epoch 31/ 100] [Batch 7/ 9] Loss: 1.30e-03
[Epoch 31/ 100] [Batch 8/ 9] Loss: 1.80e-03
[Epoch 31/ 100] [Batch 9/ 9] Loss: 1.69e-03
[Epoch 32/ 100] [Batch 1/ 9] Loss: 1.38e-03
[Epoch 32/ 100] [Batch 2/ 9] Loss: 1.83e-03
[Epoch 32/ 100] [Batch 3/ 9] Loss: 1.30e-03
[Epoch 32/ 100] [Batch 4/ 9] Loss: 1.84e-03
[Epoch 32/ 100] [Batch 5/ 9] Loss: 1.34e-03
[Epoch 32/ 100] [Batch 6/ 9] Loss: 1.61e-03
[Epoch 32/ 100] [Batch 7/ 9] Loss: 1.70e-03
[Epoch 32/ 100] [Batch 8/ 9] Loss: 1.54e-03
[Epoch 32/ 100] [Batch 9/ 9] Loss: 1.44e-03
[Epoch 33/ 100] [Batch 1/ 9] Loss: 1.35e-03
[Epoch 33/ 100] [Batch 2/ 9] Loss: 1.88e-03
[Epoch 33/ 100] [Batch 3/ 9] Loss: 1.45e-03
[Epoch 33/ 100] [Batch 4/ 9] Loss: 1.81e-03
[Epoch 33/ 100] [Batch 5/ 9] Loss: 1.47e-03
[Epoch 33/ 100] [Batch 6/ 9] Loss: 1.40e-03
[Epoch 33/ 100] [Batch 7/ 9] Loss: 1.44e-03
[Epoch 33/ 100] [Batch 8/ 9] Loss: 1.78e-03
[Epoch 33/ 100] [Batch 9/ 9] Loss: 1.27e-03
[Epoch 34/ 100] [Batch 1/ 9] Loss: 1.50e-03
[Epoch 34/ 100] [Batch 2/ 9] Loss: 1.60e-03
[Epoch 34/ 100] [Batch 3/ 9] Loss: 1.63e-03
[Epoch 34/ 100] [Batch 4/ 9] Loss: 1.41e-03
[Epoch 34/ 100] [Batch 5/ 9] Loss: 1.51e-03
[Epoch 34/ 100] [Batch 6/ 9] Loss: 1.77e-03
[Epoch 34/ 100] [Batch 7/ 9] Loss: 1.51e-03
[Epoch 34/ 100] [Batch 8/ 9] Loss: 1.69e-03
[Epoch 34/ 100] [Batch 9/ 9] Loss: 1.13e-03
[Epoch 35/ 100] [Batch 1/ 9] Loss: 1.41e-03
[Epoch 35/ 100] [Batch 2/ 9] Loss: 1.75e-03
[Epoch 35/ 100] [Batch 3/ 9] Loss: 1.37e-03
[Epoch 35/ 100] [Batch 4/ 9] Loss: 1.35e-03
[Epoch 35/ 100] [Batch 5/ 9] Loss: 1.37e-03
[Epoch 35/ 100] [Batch 6/ 9] Loss: 2.06e-03
[Epoch 35/ 100] [Batch 7/ 9] Loss: 1.75e-03
[Epoch 35/ 100] [Batch 8/ 9] Loss: 1.42e-03
[Epoch 35/ 100] [Batch 9/ 9] Loss: 1.58e-03
[Epoch 36/ 100] [Batch 1/ 9] Loss: 1.77e-03
[Epoch 36/ 100] [Batch 2/ 9] Loss: 1.13e-03
[Epoch 36/ 100] [Batch 3/ 9] Loss: 1.85e-03
[Epoch 36/ 100] [Batch 4/ 9] Loss: 1.77e-03
[Epoch 36/ 100] [Batch 5/ 9] Loss: 1.40e-03
[Epoch 36/ 100] [Batch 6/ 9] Loss: 1.57e-03
[Epoch 36/ 100] [Batch 7/ 9] Loss: 1.56e-03
[Epoch 36/ 100] [Batch 8/ 9] Loss: 1.51e-03
[Epoch 36/ 100] [Batch 9/ 9] Loss: 1.32e-03
[Epoch 37/ 100] [Batch 1/ 9] Loss: 1.31e-03
[Epoch 37/ 100] [Batch 2/ 9] Loss: 1.58e-03
[Epoch 37/ 100] [Batch 3/ 9] Loss: 1.51e-03
[Epoch 37/ 100] [Batch 4/ 9] Loss: 1.68e-03
[Epoch 37/ 100] [Batch 5/ 9] Loss: 1.71e-03
[Epoch 37/ 100] [Batch 6/ 9] Loss: 1.29e-03
[Epoch 37/ 100] [Batch 7/ 9] Loss: 1.80e-03
[Epoch 37/ 100] [Batch 8/ 9] Loss: 1.52e-03
[Epoch 37/ 100] [Batch 9/ 9] Loss: 1.74e-03
[Epoch 38/ 100] [Batch 1/ 9] Loss: 1.50e-03
[Epoch 38/ 100] [Batch 2/ 9] Loss: 1.65e-03
[Epoch 38/ 100] [Batch 3/ 9] Loss: 1.42e-03
[Epoch 38/ 100] [Batch 4/ 9] Loss: 1.90e-03
[Epoch 38/ 100] [Batch 5/ 9] Loss: 1.37e-03
[Epoch 38/ 100] [Batch 6/ 9] Loss: 1.65e-03
[Epoch 38/ 100] [Batch 7/ 9] Loss: 1.41e-03
[Epoch 38/ 100] [Batch 8/ 9] Loss: 1.38e-03
[Epoch 38/ 100] [Batch 9/ 9] Loss: 2.07e-03
[Epoch 39/ 100] [Batch 1/ 9] Loss: 1.69e-03
[Epoch 39/ 100] [Batch 2/ 9] Loss: 1.50e-03
[Epoch 39/ 100] [Batch 3/ 9] Loss: 1.66e-03
[Epoch 39/ 100] [Batch 4/ 9] Loss: 1.72e-03
[Epoch 39/ 100] [Batch 5/ 9] Loss: 1.24e-03
[Epoch 39/ 100] [Batch 6/ 9] Loss: 1.64e-03
[Epoch 39/ 100] [Batch 7/ 9] Loss: 1.33e-03
[Epoch 39/ 100] [Batch 8/ 9] Loss: 1.77e-03
[Epoch 39/ 100] [Batch 9/ 9] Loss: 1.32e-03
[Epoch 40/ 100] [Batch 1/ 9] Loss: 1.30e-03
[Epoch 40/ 100] [Batch 2/ 9] Loss: 1.58e-03
[Epoch 40/ 100] [Batch 3/ 9] Loss: 1.46e-03
[Epoch 40/ 100] [Batch 4/ 9] Loss: 1.39e-03
[Epoch 40/ 100] [Batch 5/ 9] Loss: 1.92e-03
[Epoch 40/ 100] [Batch 6/ 9] Loss: 1.67e-03
[Epoch 40/ 100] [Batch 7/ 9] Loss: 1.81e-03
[Epoch 40/ 100] [Batch 8/ 9] Loss: 1.41e-03
[Epoch 40/ 100] [Batch 9/ 9] Loss: 1.41e-03
[Epoch 41/ 100] [Batch 1/ 9] Loss: 1.49e-03
[Epoch 41/ 100] [Batch 2/ 9] Loss: 1.63e-03
[Epoch 41/ 100] [Batch 3/ 9] Loss: 1.25e-03
[Epoch 41/ 100] [Batch 4/ 9] Loss: 1.58e-03
[Epoch 41/ 100] [Batch 5/ 9] Loss: 1.65e-03
[Epoch 41/ 100] [Batch 6/ 9] Loss: 1.70e-03
[Epoch 41/ 100] [Batch 7/ 9] Loss: 1.38e-03
[Epoch 41/ 100] [Batch 8/ 9] Loss: 1.76e-03
[Epoch 41/ 100] [Batch 9/ 9] Loss: 1.63e-03
[Epoch 42/ 100] [Batch 1/ 9] Loss: 1.67e-03
[Epoch 42/ 100] [Batch 2/ 9] Loss: 1.35e-03
[Epoch 42/ 100] [Batch 3/ 9] Loss: 1.66e-03
[Epoch 42/ 100] [Batch 4/ 9] Loss: 1.60e-03
[Epoch 42/ 100] [Batch 5/ 9] Loss: 1.25e-03
[Epoch 42/ 100] [Batch 6/ 9] Loss: 1.93e-03
[Epoch 42/ 100] [Batch 7/ 9] Loss: 1.27e-03
[Epoch 42/ 100] [Batch 8/ 9] Loss: 1.81e-03
[Epoch 42/ 100] [Batch 9/ 9] Loss: 1.35e-03
[Epoch 43/ 100] [Batch 1/ 9] Loss: 1.50e-03
[Epoch 43/ 100] [Batch 2/ 9] Loss: 1.20e-03
[Epoch 43/ 100] [Batch 3/ 9] Loss: 1.42e-03
[Epoch 43/ 100] [Batch 4/ 9] Loss: 1.78e-03
[Epoch 43/ 100] [Batch 5/ 9] Loss: 1.57e-03
[Epoch 43/ 100] [Batch 6/ 9] Loss: 2.03e-03
[Epoch 43/ 100] [Batch 7/ 9] Loss: 1.35e-03
[Epoch 43/ 100] [Batch 8/ 9] Loss: 1.76e-03
[Epoch 43/ 100] [Batch 9/ 9] Loss: 1.12e-03
[Epoch 44/ 100] [Batch 1/ 9] Loss: 1.39e-03
[Epoch 44/ 100] [Batch 2/ 9] Loss: 1.49e-03
[Epoch 44/ 100] [Batch 3/ 9] Loss: 1.84e-03
[Epoch 44/ 100] [Batch 4/ 9] Loss: 1.60e-03
[Epoch 44/ 100] [Batch 5/ 9] Loss: 1.51e-03
[Epoch 44/ 100] [Batch 6/ 9] Loss: 1.60e-03
[Epoch 44/ 100] [Batch 7/ 9] Loss: 1.63e-03
[Epoch 44/ 100] [Batch 8/ 9] Loss: 1.42e-03
[Epoch 44/ 100] [Batch 9/ 9] Loss: 1.59e-03
[Epoch 45/ 100] [Batch 1/ 9] Loss: 1.88e-03
[Epoch 45/ 100] [Batch 2/ 9] Loss: 1.29e-03
[Epoch 45/ 100] [Batch 3/ 9] Loss: 1.49e-03
[Epoch 45/ 100] [Batch 4/ 9] Loss: 1.18e-03
[Epoch 45/ 100] [Batch 5/ 9] Loss: 1.90e-03
[Epoch 45/ 100] [Batch 6/ 9] Loss: 1.53e-03
[Epoch 45/ 100] [Batch 7/ 9] Loss: 1.68e-03
[Epoch 45/ 100] [Batch 8/ 9] Loss: 1.70e-03
[Epoch 45/ 100] [Batch 9/ 9] Loss: 1.01e-03
[Epoch 46/ 100] [Batch 1/ 9] Loss: 1.63e-03
[Epoch 46/ 100] [Batch 2/ 9] Loss: 1.41e-03
[Epoch 46/ 100] [Batch 3/ 9] Loss: 1.57e-03
[Epoch 46/ 100] [Batch 4/ 9] Loss: 1.56e-03
[Epoch 46/ 100] [Batch 5/ 9] Loss: 1.48e-03
[Epoch 46/ 100] [Batch 6/ 9] Loss: 1.43e-03
[Epoch 46/ 100] [Batch 7/ 9] Loss: 1.57e-03
[Epoch 46/ 100] [Batch 8/ 9] Loss: 1.72e-03
[Epoch 46/ 100] [Batch 9/ 9] Loss: 1.79e-03
[Epoch 47/ 100] [Batch 1/ 9] Loss: 1.75e-03
[Epoch 47/ 100] [Batch 2/ 9] Loss: 1.43e-03
[Epoch 47/ 100] [Batch 3/ 9] Loss: 1.63e-03
[Epoch 47/ 100] [Batch 4/ 9] Loss: 1.47e-03
[Epoch 47/ 100] [Batch 5/ 9] Loss: 1.63e-03
[Epoch 47/ 100] [Batch 6/ 9] Loss: 1.72e-03
[Epoch 47/ 100] [Batch 7/ 9] Loss: 1.61e-03
[Epoch 47/ 100] [Batch 8/ 9] Loss: 1.41e-03
[Epoch 47/ 100] [Batch 9/ 9] Loss: 1.01e-03
[Epoch 48/ 100] [Batch 1/ 9] Loss: 1.39e-03
[Epoch 48/ 100] [Batch 2/ 9] Loss: 1.89e-03
[Epoch 48/ 100] [Batch 3/ 9] Loss: 1.47e-03
[Epoch 48/ 100] [Batch 4/ 9] Loss: 1.69e-03
[Epoch 48/ 100] [Batch 5/ 9] Loss: 1.67e-03
[Epoch 48/ 100] [Batch 6/ 9] Loss: 1.38e-03
[Epoch 48/ 100] [Batch 7/ 9] Loss: 1.49e-03
[Epoch 48/ 100] [Batch 8/ 9] Loss: 1.63e-03
[Epoch 48/ 100] [Batch 9/ 9] Loss: 1.38e-03
[Epoch 49/ 100] [Batch 1/ 9] Loss: 1.79e-03
[Epoch 49/ 100] [Batch 2/ 9] Loss: 1.69e-03
[Epoch 49/ 100] [Batch 3/ 9] Loss: 1.46e-03
[Epoch 49/ 100] [Batch 4/ 9] Loss: 1.91e-03
[Epoch 49/ 100] [Batch 5/ 9] Loss: 1.69e-03
[Epoch 49/ 100] [Batch 6/ 9] Loss: 1.28e-03
[Epoch 49/ 100] [Batch 7/ 9] Loss: 1.37e-03
[Epoch 49/ 100] [Batch 8/ 9] Loss: 1.50e-03
[Epoch 49/ 100] [Batch 9/ 9] Loss: 1.12e-03
[Epoch 50/ 100] [Batch 1/ 9] Loss: 1.58e-03
[Epoch 50/ 100] [Batch 2/ 9] Loss: 1.47e-03
[Epoch 50/ 100] [Batch 3/ 9] Loss: 1.21e-03
[Epoch 50/ 100] [Batch 4/ 9] Loss: 1.83e-03
[Epoch 50/ 100] [Batch 5/ 9] Loss: 1.72e-03
[Epoch 50/ 100] [Batch 6/ 9] Loss: 1.56e-03
[Epoch 50/ 100] [Batch 7/ 9] Loss: 1.48e-03
[Epoch 50/ 100] [Batch 8/ 9] Loss: 1.71e-03
[Epoch 50/ 100] [Batch 9/ 9] Loss: 1.25e-03
[Epoch 51/ 100] [Batch 1/ 9] Loss: 1.69e-03
[Epoch 51/ 100] [Batch 2/ 9] Loss: 1.81e-03
[Epoch 51/ 100] [Batch 3/ 9] Loss: 1.55e-03
[Epoch 51/ 100] [Batch 4/ 9] Loss: 1.77e-03
[Epoch 51/ 100] [Batch 5/ 9] Loss: 1.61e-03
[Epoch 51/ 100] [Batch 6/ 9] Loss: 1.15e-03
[Epoch 51/ 100] [Batch 7/ 9] Loss: 1.62e-03
[Epoch 51/ 100] [Batch 8/ 9] Loss: 1.37e-03
[Epoch 51/ 100] [Batch 9/ 9] Loss: 1.66e-03
[Epoch 52/ 100] [Batch 1/ 9] Loss: 1.62e-03
[Epoch 52/ 100] [Batch 2/ 9] Loss: 1.49e-03
[Epoch 52/ 100] [Batch 3/ 9] Loss: 1.59e-03
[Epoch 52/ 100] [Batch 4/ 9] Loss: 1.62e-03
[Epoch 52/ 100] [Batch 5/ 9] Loss: 1.28e-03
[Epoch 52/ 100] [Batch 6/ 9] Loss: 1.59e-03
[Epoch 52/ 100] [Batch 7/ 9] Loss: 1.69e-03
[Epoch 52/ 100] [Batch 8/ 9] Loss: 1.73e-03
[Epoch 52/ 100] [Batch 9/ 9] Loss: 1.32e-03
[Epoch 53/ 100] [Batch 1/ 9] Loss: 1.86e-03
[Epoch 53/ 100] [Batch 2/ 9] Loss: 1.62e-03
[Epoch 53/ 100] [Batch 3/ 9] Loss: 1.34e-03
[Epoch 53/ 100] [Batch 4/ 9] Loss: 1.45e-03
[Epoch 53/ 100] [Batch 5/ 9] Loss: 1.92e-03
[Epoch 53/ 100] [Batch 6/ 9] Loss: 1.33e-03
[Epoch 53/ 100] [Batch 7/ 9] Loss: 1.40e-03
[Epoch 53/ 100] [Batch 8/ 9] Loss: 1.62e-03
[Epoch 53/ 100] [Batch 9/ 9] Loss: 1.55e-03
[Epoch 54/ 100] [Batch 1/ 9] Loss: 1.46e-03
[Epoch 54/ 100] [Batch 2/ 9] Loss: 1.57e-03
[Epoch 54/ 100] [Batch 3/ 9] Loss: 1.76e-03
[Epoch 54/ 100] [Batch 4/ 9] Loss: 1.60e-03
[Epoch 54/ 100] [Batch 5/ 9] Loss: 1.07e-03
[Epoch 54/ 100] [Batch 6/ 9] Loss: 1.59e-03
[Epoch 54/ 100] [Batch 7/ 9] Loss: 1.72e-03
[Epoch 54/ 100] [Batch 8/ 9] Loss: 1.54e-03
[Epoch 54/ 100] [Batch 9/ 9] Loss: 2.13e-03
[Epoch 55/ 100] [Batch 1/ 9] Loss: 1.80e-03
[Epoch 55/ 100] [Batch 2/ 9] Loss: 1.18e-03
[Epoch 55/ 100] [Batch 3/ 9] Loss: 1.59e-03
[Epoch 55/ 100] [Batch 4/ 9] Loss: 1.38e-03
[Epoch 55/ 100] [Batch 5/ 9] Loss: 1.60e-03
[Epoch 55/ 100] [Batch 6/ 9] Loss: 1.83e-03
[Epoch 55/ 100] [Batch 7/ 9] Loss: 1.62e-03
[Epoch 55/ 100] [Batch 8/ 9] Loss: 1.45e-03
[Epoch 55/ 100] [Batch 9/ 9] Loss: 1.67e-03
[Epoch 56/ 100] [Batch 1/ 9] Loss: 1.66e-03
[Epoch 56/ 100] [Batch 2/ 9] Loss: 1.42e-03
[Epoch 56/ 100] [Batch 3/ 9] Loss: 1.42e-03
[Epoch 56/ 100] [Batch 4/ 9] Loss: 1.82e-03
[Epoch 56/ 100] [Batch 5/ 9] Loss: 1.43e-03
[Epoch 56/ 100] [Batch 6/ 9] Loss: 1.40e-03
[Epoch 56/ 100] [Batch 7/ 9] Loss: 1.68e-03
[Epoch 56/ 100] [Batch 8/ 9] Loss: 1.79e-03
[Epoch 56/ 100] [Batch 9/ 9] Loss: 1.23e-03
[Epoch 57/ 100] [Batch 1/ 9] Loss: 1.37e-03
[Epoch 57/ 100] [Batch 2/ 9] Loss: 1.67e-03
[Epoch 57/ 100] [Batch 3/ 9] Loss: 1.80e-03
[Epoch 57/ 100] [Batch 4/ 9] Loss: 1.63e-03
[Epoch 57/ 100] [Batch 5/ 9] Loss: 1.42e-03
[Epoch 57/ 100] [Batch 6/ 9] Loss: 1.33e-03
[Epoch 57/ 100] [Batch 7/ 9] Loss: 1.71e-03
[Epoch 57/ 100] [Batch 8/ 9] Loss: 1.28e-03
[Epoch 57/ 100] [Batch 9/ 9] Loss: 2.89e-03
[Epoch 58/ 100] [Batch 1/ 9] Loss: 1.53e-03
[Epoch 58/ 100] [Batch 2/ 9] Loss: 1.34e-03
[Epoch 58/ 100] [Batch 3/ 9] Loss: 1.68e-03
[Epoch 58/ 100] [Batch 4/ 9] Loss: 1.45e-03
[Epoch 58/ 100] [Batch 5/ 9] Loss: 1.52e-03
[Epoch 58/ 100] [Batch 6/ 9] Loss: 1.60e-03
[Epoch 58/ 100] [Batch 7/ 9] Loss: 1.70e-03
[Epoch 58/ 100] [Batch 8/ 9] Loss: 1.45e-03
[Epoch 58/ 100] [Batch 9/ 9] Loss: 2.61e-03
[Epoch 59/ 100] [Batch 1/ 9] Loss: 1.45e-03
[Epoch 59/ 100] [Batch 2/ 9] Loss: 1.14e-03
[Epoch 59/ 100] [Batch 3/ 9] Loss: 1.58e-03
[Epoch 59/ 100] [Batch 4/ 9] Loss: 2.05e-03
[Epoch 59/ 100] [Batch 5/ 9] Loss: 1.44e-03
[Epoch 59/ 100] [Batch 6/ 9] Loss: 1.46e-03
[Epoch 59/ 100] [Batch 7/ 9] Loss: 1.99e-03
[Epoch 59/ 100] [Batch 8/ 9] Loss: 1.55e-03
[Epoch 59/ 100] [Batch 9/ 9] Loss: 1.49e-03
[Epoch 60/ 100] [Batch 1/ 9] Loss: 1.28e-03
[Epoch 60/ 100] [Batch 2/ 9] Loss: 1.63e-03
[Epoch 60/ 100] [Batch 3/ 9] Loss: 1.51e-03
[Epoch 60/ 100] [Batch 4/ 9] Loss: 1.62e-03
[Epoch 60/ 100] [Batch 5/ 9] Loss: 1.99e-03
[Epoch 60/ 100] [Batch 6/ 9] Loss: 1.75e-03
[Epoch 60/ 100] [Batch 7/ 9] Loss: 1.34e-03
[Epoch 60/ 100] [Batch 8/ 9] Loss: 1.37e-03
[Epoch 60/ 100] [Batch 9/ 9] Loss: 1.70e-03
[Epoch 61/ 100] [Batch 1/ 9] Loss: 1.42e-03
[Epoch 61/ 100] [Batch 2/ 9] Loss: 1.68e-03
[Epoch 61/ 100] [Batch 3/ 9] Loss: 1.46e-03
[Epoch 61/ 100] [Batch 4/ 9] Loss: 1.76e-03
[Epoch 61/ 100] [Batch 5/ 9] Loss: 1.64e-03
[Epoch 61/ 100] [Batch 6/ 9] Loss: 1.44e-03
[Epoch 61/ 100] [Batch 7/ 9] Loss: 1.62e-03
[Epoch 61/ 100] [Batch 8/ 9] Loss: 1.59e-03
[Epoch 61/ 100] [Batch 9/ 9] Loss: 1.19e-03
[Epoch 62/ 100] [Batch 1/ 9] Loss: 1.71e-03
[Epoch 62/ 100] [Batch 2/ 9] Loss: 1.38e-03
[Epoch 62/ 100] [Batch 3/ 9] Loss: 1.58e-03
[Epoch 62/ 100] [Batch 4/ 9] Loss: 1.40e-03
[Epoch 62/ 100] [Batch 5/ 9] Loss: 1.76e-03
[Epoch 62/ 100] [Batch 6/ 9] Loss: 1.63e-03
[Epoch 62/ 100] [Batch 7/ 9] Loss: 1.51e-03
[Epoch 62/ 100] [Batch 8/ 9] Loss: 1.53e-03
[Epoch 62/ 100] [Batch 9/ 9] Loss: 1.54e-03
[Epoch 63/ 100] [Batch 1/ 9] Loss: 1.47e-03
[Epoch 63/ 100] [Batch 2/ 9] Loss: 1.33e-03
[Epoch 63/ 100] [Batch 3/ 9] Loss: 1.57e-03
[Epoch 63/ 100] [Batch 4/ 9] Loss: 1.49e-03
[Epoch 63/ 100] [Batch 5/ 9] Loss: 1.66e-03
[Epoch 63/ 100] [Batch 6/ 9] Loss: 1.65e-03
[Epoch 63/ 100] [Batch 7/ 9] Loss: 1.87e-03
[Epoch 63/ 100] [Batch 8/ 9] Loss: 1.57e-03
[Epoch 63/ 100] [Batch 9/ 9] Loss: 1.23e-03
[Epoch 64/ 100] [Batch 1/ 9] Loss: 1.51e-03
[Epoch 64/ 100] [Batch 2/ 9] Loss: 1.46e-03
[Epoch 64/ 100] [Batch 3/ 9] Loss: 1.51e-03
[Epoch 64/ 100] [Batch 4/ 9] Loss: 1.56e-03
[Epoch 64/ 100] [Batch 5/ 9] Loss: 1.40e-03
[Epoch 64/ 100] [Batch 6/ 9] Loss: 1.87e-03
[Epoch 64/ 100] [Batch 7/ 9] Loss: 1.59e-03
[Epoch 64/ 100] [Batch 8/ 9] Loss: 1.62e-03
[Epoch 64/ 100] [Batch 9/ 9] Loss: 1.46e-03
[Epoch 65/ 100] [Batch 1/ 9] Loss: 1.54e-03
[Epoch 65/ 100] [Batch 2/ 9] Loss: 1.85e-03
[Epoch 65/ 100] [Batch 3/ 9] Loss: 1.66e-03
[Epoch 65/ 100] [Batch 4/ 9] Loss: 1.58e-03
[Epoch 65/ 100] [Batch 5/ 9] Loss: 1.20e-03
[Epoch 65/ 100] [Batch 6/ 9] Loss: 1.41e-03
[Epoch 65/ 100] [Batch 7/ 9] Loss: 1.54e-03
[Epoch 65/ 100] [Batch 8/ 9] Loss: 1.61e-03
[Epoch 65/ 100] [Batch 9/ 9] Loss: 1.96e-03
[Epoch 66/ 100] [Batch 1/ 9] Loss: 1.59e-03
[Epoch 66/ 100] [Batch 2/ 9] Loss: 1.51e-03
[Epoch 66/ 100] [Batch 3/ 9] Loss: 1.85e-03
[Epoch 66/ 100] [Batch 4/ 9] Loss: 1.87e-03
[Epoch 66/ 100] [Batch 5/ 9] Loss: 1.38e-03
[Epoch 66/ 100] [Batch 6/ 9] Loss: 1.83e-03
[Epoch 66/ 100] [Batch 7/ 9] Loss: 1.13e-03
[Epoch 66/ 100] [Batch 8/ 9] Loss: 1.53e-03
[Epoch 66/ 100] [Batch 9/ 9] Loss: 1.08e-03
[Epoch 67/ 100] [Batch 1/ 9] Loss: 1.58e-03
[Epoch 67/ 100] [Batch 2/ 9] Loss: 1.63e-03
[Epoch 67/ 100] [Batch 3/ 9] Loss: 1.48e-03
[Epoch 67/ 100] [Batch 4/ 9] Loss: 1.70e-03
[Epoch 67/ 100] [Batch 5/ 9] Loss: 1.42e-03
[Epoch 67/ 100] [Batch 6/ 9] Loss: 1.64e-03
[Epoch 67/ 100] [Batch 7/ 9] Loss: 1.30e-03
[Epoch 67/ 100] [Batch 8/ 9] Loss: 1.84e-03
[Epoch 67/ 100] [Batch 9/ 9] Loss: 1.35e-03
[Epoch 68/ 100] [Batch 1/ 9] Loss: 1.20e-03
[Epoch 68/ 100] [Batch 2/ 9] Loss: 1.39e-03
[Epoch 68/ 100] [Batch 3/ 9] Loss: 1.68e-03
[Epoch 68/ 100] [Batch 4/ 9] Loss: 1.62e-03
[Epoch 68/ 100] [Batch 5/ 9] Loss: 1.66e-03
[Epoch 68/ 100] [Batch 6/ 9] Loss: 2.08e-03
[Epoch 68/ 100] [Batch 7/ 9] Loss: 1.69e-03
[Epoch 68/ 100] [Batch 8/ 9] Loss: 1.50e-03
[Epoch 68/ 100] [Batch 9/ 9] Loss: 7.45e-04
[Epoch 69/ 100] [Batch 1/ 9] Loss: 1.44e-03
[Epoch 69/ 100] [Batch 2/ 9] Loss: 1.59e-03
[Epoch 69/ 100] [Batch 3/ 9] Loss: 1.40e-03
[Epoch 69/ 100] [Batch 4/ 9] Loss: 1.82e-03
[Epoch 69/ 100] [Batch 5/ 9] Loss: 1.41e-03
[Epoch 69/ 100] [Batch 6/ 9] Loss: 1.64e-03
[Epoch 69/ 100] [Batch 7/ 9] Loss: 1.86e-03
[Epoch 69/ 100] [Batch 8/ 9] Loss: 1.44e-03
[Epoch 69/ 100] [Batch 9/ 9] Loss: 1.15e-03
[Epoch 70/ 100] [Batch 1/ 9] Loss: 1.51e-03
[Epoch 70/ 100] [Batch 2/ 9] Loss: 1.37e-03
[Epoch 70/ 100] [Batch 3/ 9] Loss: 1.53e-03
[Epoch 70/ 100] [Batch 4/ 9] Loss: 1.69e-03
[Epoch 70/ 100] [Batch 5/ 9] Loss: 1.94e-03
[Epoch 70/ 100] [Batch 6/ 9] Loss: 1.69e-03
[Epoch 70/ 100] [Batch 7/ 9] Loss: 1.51e-03
[Epoch 70/ 100] [Batch 8/ 9] Loss: 1.47e-03
[Epoch 70/ 100] [Batch 9/ 9] Loss: 8.61e-04
[Epoch 71/ 100] [Batch 1/ 9] Loss: 1.63e-03
[Epoch 71/ 100] [Batch 2/ 9] Loss: 1.59e-03
[Epoch 71/ 100] [Batch 3/ 9] Loss: 1.65e-03
[Epoch 71/ 100] [Batch 4/ 9] Loss: 1.85e-03
[Epoch 71/ 100] [Batch 5/ 9] Loss: 1.30e-03
[Epoch 71/ 100] [Batch 6/ 9] Loss: 1.44e-03
[Epoch 71/ 100] [Batch 7/ 9] Loss: 1.57e-03
[Epoch 71/ 100] [Batch 8/ 9] Loss: 1.63e-03
[Epoch 71/ 100] [Batch 9/ 9] Loss: 1.42e-03
[Epoch 72/ 100] [Batch 1/ 9] Loss: 1.77e-03
[Epoch 72/ 100] [Batch 2/ 9] Loss: 1.47e-03
[Epoch 72/ 100] [Batch 3/ 9] Loss: 1.65e-03
[Epoch 72/ 100] [Batch 4/ 9] Loss: 1.58e-03
[Epoch 72/ 100] [Batch 5/ 9] Loss: 1.90e-03
[Epoch 72/ 100] [Batch 6/ 9] Loss: 1.38e-03
[Epoch 72/ 100] [Batch 7/ 9] Loss: 1.31e-03
[Epoch 72/ 100] [Batch 8/ 9] Loss: 1.70e-03
[Epoch 72/ 100] [Batch 9/ 9] Loss: 1.25e-03
[Epoch 73/ 100] [Batch 1/ 9] Loss: 1.54e-03
[Epoch 73/ 100] [Batch 2/ 9] Loss: 1.43e-03
[Epoch 73/ 100] [Batch 3/ 9] Loss: 1.25e-03
[Epoch 73/ 100] [Batch 4/ 9] Loss: 1.71e-03
[Epoch 73/ 100] [Batch 5/ 9] Loss: 1.61e-03
[Epoch 73/ 100] [Batch 6/ 9] Loss: 1.47e-03
[Epoch 73/ 100] [Batch 7/ 9] Loss: 1.49e-03
[Epoch 73/ 100] [Batch 8/ 9] Loss: 2.03e-03
[Epoch 73/ 100] [Batch 9/ 9] Loss: 1.44e-03
[Epoch 74/ 100] [Batch 1/ 9] Loss: 2.06e-03
[Epoch 74/ 100] [Batch 2/ 9] Loss: 1.47e-03
[Epoch 74/ 100] [Batch 3/ 9] Loss: 1.68e-03
[Epoch 74/ 100] [Batch 4/ 9] Loss: 1.45e-03
[Epoch 74/ 100] [Batch 5/ 9] Loss: 1.62e-03
[Epoch 74/ 100] [Batch 6/ 9] Loss: 1.57e-03
[Epoch 74/ 100] [Batch 7/ 9] Loss: 1.50e-03
[Epoch 74/ 100] [Batch 8/ 9] Loss: 1.21e-03
[Epoch 74/ 100] [Batch 9/ 9] Loss: 1.35e-03
[Epoch 75/ 100] [Batch 1/ 9] Loss: 1.54e-03
[Epoch 75/ 100] [Batch 2/ 9] Loss: 1.56e-03
[Epoch 75/ 100] [Batch 3/ 9] Loss: 1.86e-03
[Epoch 75/ 100] [Batch 4/ 9] Loss: 1.27e-03
[Epoch 75/ 100] [Batch 5/ 9] Loss: 1.64e-03
[Epoch 75/ 100] [Batch 6/ 9] Loss: 1.88e-03
[Epoch 75/ 100] [Batch 7/ 9] Loss: 1.30e-03
[Epoch 75/ 100] [Batch 8/ 9] Loss: 1.43e-03
[Epoch 75/ 100] [Batch 9/ 9] Loss: 1.57e-03
[Epoch 76/ 100] [Batch 1/ 9] Loss: 1.25e-03
[Epoch 76/ 100] [Batch 2/ 9] Loss: 1.68e-03
[Epoch 76/ 100] [Batch 3/ 9] Loss: 1.29e-03
[Epoch 76/ 100] [Batch 4/ 9] Loss: 1.85e-03
[Epoch 76/ 100] [Batch 5/ 9] Loss: 1.74e-03
[Epoch 76/ 100] [Batch 6/ 9] Loss: 1.29e-03
[Epoch 76/ 100] [Batch 7/ 9] Loss: 1.70e-03
[Epoch 76/ 100] [Batch 8/ 9] Loss: 1.67e-03
[Epoch 76/ 100] [Batch 9/ 9] Loss: 1.61e-03
[Epoch 77/ 100] [Batch 1/ 9] Loss: 1.87e-03
[Epoch 77/ 100] [Batch 2/ 9] Loss: 1.55e-03
[Epoch 77/ 100] [Batch 3/ 9] Loss: 1.40e-03
[Epoch 77/ 100] [Batch 4/ 9] Loss: 1.61e-03
[Epoch 77/ 100] [Batch 5/ 9] Loss: 1.26e-03
[Epoch 77/ 100] [Batch 6/ 9] Loss: 1.43e-03
[Epoch 77/ 100] [Batch 7/ 9] Loss: 1.56e-03
[Epoch 77/ 100] [Batch 8/ 9] Loss: 1.47e-03
[Epoch 77/ 100] [Batch 9/ 9] Loss: 2.52e-03
[Epoch 78/ 100] [Batch 1/ 9] Loss: 1.59e-03
[Epoch 78/ 100] [Batch 2/ 9] Loss: 1.20e-03
[Epoch 78/ 100] [Batch 3/ 9] Loss: 1.74e-03
[Epoch 78/ 100] [Batch 4/ 9] Loss: 1.60e-03
[Epoch 78/ 100] [Batch 5/ 9] Loss: 1.87e-03
[Epoch 78/ 100] [Batch 6/ 9] Loss: 1.83e-03
[Epoch 78/ 100] [Batch 7/ 9] Loss: 1.54e-03
[Epoch 78/ 100] [Batch 8/ 9] Loss: 1.07e-03
[Epoch 78/ 100] [Batch 9/ 9] Loss: 1.79e-03
[Epoch 79/ 100] [Batch 1/ 9] Loss: 1.47e-03
[Epoch 79/ 100] [Batch 2/ 9] Loss: 1.44e-03
[Epoch 79/ 100] [Batch 3/ 9] Loss: 1.24e-03
[Epoch 79/ 100] [Batch 4/ 9] Loss: 1.95e-03
[Epoch 79/ 100] [Batch 5/ 9] Loss: 1.43e-03
[Epoch 79/ 100] [Batch 6/ 9] Loss: 1.47e-03
[Epoch 79/ 100] [Batch 7/ 9] Loss: 1.63e-03
[Epoch 79/ 100] [Batch 8/ 9] Loss: 1.85e-03
[Epoch 79/ 100] [Batch 9/ 9] Loss: 1.70e-03
[Epoch 80/ 100] [Batch 1/ 9] Loss: 1.44e-03
[Epoch 80/ 100] [Batch 2/ 9] Loss: 1.66e-03
[Epoch 80/ 100] [Batch 3/ 9] Loss: 1.14e-03
[Epoch 80/ 100] [Batch 4/ 9] Loss: 1.44e-03
[Epoch 80/ 100] [Batch 5/ 9] Loss: 1.49e-03
[Epoch 80/ 100] [Batch 6/ 9] Loss: 1.70e-03
[Epoch 80/ 100] [Batch 7/ 9] Loss: 1.62e-03
[Epoch 80/ 100] [Batch 8/ 9] Loss: 1.91e-03
[Epoch 80/ 100] [Batch 9/ 9] Loss: 1.78e-03
[Epoch 81/ 100] [Batch 1/ 9] Loss: 1.41e-03
[Epoch 81/ 100] [Batch 2/ 9] Loss: 1.74e-03
[Epoch 81/ 100] [Batch 3/ 9] Loss: 1.51e-03
[Epoch 81/ 100] [Batch 4/ 9] Loss: 1.58e-03
[Epoch 81/ 100] [Batch 5/ 9] Loss: 1.94e-03
[Epoch 81/ 100] [Batch 6/ 9] Loss: 1.57e-03
[Epoch 81/ 100] [Batch 7/ 9] Loss: 1.54e-03
[Epoch 81/ 100] [Batch 8/ 9] Loss: 1.26e-03
[Epoch 81/ 100] [Batch 9/ 9] Loss: 1.47e-03
[Epoch 82/ 100] [Batch 1/ 9] Loss: 1.97e-03
[Epoch 82/ 100] [Batch 2/ 9] Loss: 1.89e-03
[Epoch 82/ 100] [Batch 3/ 9] Loss: 1.63e-03
[Epoch 82/ 100] [Batch 4/ 9] Loss: 1.15e-03
[Epoch 82/ 100] [Batch 5/ 9] Loss: 1.58e-03
[Epoch 82/ 100] [Batch 6/ 9] Loss: 1.66e-03
[Epoch 82/ 100] [Batch 7/ 9] Loss: 1.34e-03
[Epoch 82/ 100] [Batch 8/ 9] Loss: 1.40e-03
[Epoch 82/ 100] [Batch 9/ 9] Loss: 1.29e-03
[Epoch 83/ 100] [Batch 1/ 9] Loss: 1.37e-03
[Epoch 83/ 100] [Batch 2/ 9] Loss: 1.67e-03
[Epoch 83/ 100] [Batch 3/ 9] Loss: 1.66e-03
[Epoch 83/ 100] [Batch 4/ 9] Loss: 1.86e-03
[Epoch 83/ 100] [Batch 5/ 9] Loss: 1.49e-03
[Epoch 83/ 100] [Batch 6/ 9] Loss: 1.33e-03
[Epoch 83/ 100] [Batch 7/ 9] Loss: 1.57e-03
[Epoch 83/ 100] [Batch 8/ 9] Loss: 1.68e-03
[Epoch 83/ 100] [Batch 9/ 9] Loss: 1.23e-03
[Epoch 84/ 100] [Batch 1/ 9] Loss: 1.42e-03
[Epoch 84/ 100] [Batch 2/ 9] Loss: 1.43e-03
[Epoch 84/ 100] [Batch 3/ 9] Loss: 1.45e-03
[Epoch 84/ 100] [Batch 4/ 9] Loss: 1.52e-03
[Epoch 84/ 100] [Batch 5/ 9] Loss: 1.74e-03
[Epoch 84/ 100] [Batch 6/ 9] Loss: 1.88e-03
[Epoch 84/ 100] [Batch 7/ 9] Loss: 1.41e-03
[Epoch 84/ 100] [Batch 8/ 9] Loss: 1.78e-03
[Epoch 84/ 100] [Batch 9/ 9] Loss: 1.31e-03
[Epoch 85/ 100] [Batch 1/ 9] Loss: 1.40e-03
[Epoch 85/ 100] [Batch 2/ 9] Loss: 1.78e-03
[Epoch 85/ 100] [Batch 3/ 9] Loss: 1.49e-03
[Epoch 85/ 100] [Batch 4/ 9] Loss: 1.90e-03
[Epoch 85/ 100] [Batch 5/ 9] Loss: 1.28e-03
[Epoch 85/ 100] [Batch 6/ 9] Loss: 1.82e-03
[Epoch 85/ 100] [Batch 7/ 9] Loss: 1.59e-03
[Epoch 85/ 100] [Batch 8/ 9] Loss: 1.52e-03
[Epoch 85/ 100] [Batch 9/ 9] Loss: 1.35e-03
[Epoch 86/ 100] [Batch 1/ 9] Loss: 1.42e-03
[Epoch 86/ 100] [Batch 2/ 9] Loss: 1.56e-03
[Epoch 86/ 100] [Batch 3/ 9] Loss: 1.45e-03
[Epoch 86/ 100] [Batch 4/ 9] Loss: 1.31e-03
[Epoch 86/ 100] [Batch 5/ 9] Loss: 1.41e-03
[Epoch 86/ 100] [Batch 6/ 9] Loss: 1.53e-03
[Epoch 86/ 100] [Batch 7/ 9] Loss: 1.72e-03
[Epoch 86/ 100] [Batch 8/ 9] Loss: 1.78e-03
[Epoch 86/ 100] [Batch 9/ 9] Loss: 2.50e-03
[Epoch 87/ 100] [Batch 1/ 9] Loss: 1.65e-03
[Epoch 87/ 100] [Batch 2/ 9] Loss: 1.44e-03
[Epoch 87/ 100] [Batch 3/ 9] Loss: 1.99e-03
[Epoch 87/ 100] [Batch 4/ 9] Loss: 1.74e-03
[Epoch 87/ 100] [Batch 5/ 9] Loss: 1.42e-03
[Epoch 87/ 100] [Batch 6/ 9] Loss: 1.45e-03
[Epoch 87/ 100] [Batch 7/ 9] Loss: 1.63e-03
[Epoch 87/ 100] [Batch 8/ 9] Loss: 1.40e-03
[Epoch 87/ 100] [Batch 9/ 9] Loss: 1.77e-03
[Epoch 88/ 100] [Batch 1/ 9] Loss: 1.40e-03
[Epoch 88/ 100] [Batch 2/ 9] Loss: 1.56e-03
[Epoch 88/ 100] [Batch 3/ 9] Loss: 1.64e-03
[Epoch 88/ 100] [Batch 4/ 9] Loss: 1.70e-03
[Epoch 88/ 100] [Batch 5/ 9] Loss: 1.36e-03
[Epoch 88/ 100] [Batch 6/ 9] Loss: 1.61e-03
[Epoch 88/ 100] [Batch 7/ 9] Loss: 1.76e-03
[Epoch 88/ 100] [Batch 8/ 9] Loss: 1.57e-03
[Epoch 88/ 100] [Batch 9/ 9] Loss: 1.46e-03
[Epoch 89/ 100] [Batch 1/ 9] Loss: 1.43e-03
[Epoch 89/ 100] [Batch 2/ 9] Loss: 1.83e-03
[Epoch 89/ 100] [Batch 3/ 9] Loss: 1.32e-03
[Epoch 89/ 100] [Batch 4/ 9] Loss: 1.63e-03
[Epoch 89/ 100] [Batch 5/ 9] Loss: 1.46e-03
[Epoch 89/ 100] [Batch 6/ 9] Loss: 1.80e-03
[Epoch 89/ 100] [Batch 7/ 9] Loss: 1.63e-03
[Epoch 89/ 100] [Batch 8/ 9] Loss: 1.56e-03
[Epoch 89/ 100] [Batch 9/ 9] Loss: 1.18e-03
[Epoch 90/ 100] [Batch 1/ 9] Loss: 1.57e-03
[Epoch 90/ 100] [Batch 2/ 9] Loss: 1.55e-03
[Epoch 90/ 100] [Batch 3/ 9] Loss: 1.62e-03
[Epoch 90/ 100] [Batch 4/ 9] Loss: 1.85e-03
[Epoch 90/ 100] [Batch 5/ 9] Loss: 1.37e-03
[Epoch 90/ 100] [Batch 6/ 9] Loss: 1.74e-03
[Epoch 90/ 100] [Batch 7/ 9] Loss: 1.34e-03
[Epoch 90/ 100] [Batch 8/ 9] Loss: 1.40e-03
[Epoch 90/ 100] [Batch 9/ 9] Loss: 1.70e-03
[Epoch 91/ 100] [Batch 1/ 9] Loss: 1.50e-03
[Epoch 91/ 100] [Batch 2/ 9] Loss: 1.47e-03
[Epoch 91/ 100] [Batch 3/ 9] Loss: 1.76e-03
[Epoch 91/ 100] [Batch 4/ 9] Loss: 1.54e-03
[Epoch 91/ 100] [Batch 5/ 9] Loss: 1.26e-03
[Epoch 91/ 100] [Batch 6/ 9] Loss: 1.38e-03
[Epoch 91/ 100] [Batch 7/ 9] Loss: 1.78e-03
[Epoch 91/ 100] [Batch 8/ 9] Loss: 1.89e-03
[Epoch 91/ 100] [Batch 9/ 9] Loss: 1.27e-03
[Epoch 92/ 100] [Batch 1/ 9] Loss: 1.71e-03
[Epoch 92/ 100] [Batch 2/ 9] Loss: 1.41e-03
[Epoch 92/ 100] [Batch 3/ 9] Loss: 1.84e-03
[Epoch 92/ 100] [Batch 4/ 9] Loss: 1.56e-03
[Epoch 92/ 100] [Batch 5/ 9] Loss: 1.37e-03
[Epoch 92/ 100] [Batch 6/ 9] Loss: 1.52e-03
[Epoch 92/ 100] [Batch 7/ 9] Loss: 1.46e-03
[Epoch 92/ 100] [Batch 8/ 9] Loss: 1.63e-03
[Epoch 92/ 100] [Batch 9/ 9] Loss: 1.52e-03
[Epoch 93/ 100] [Batch 1/ 9] Loss: 1.43e-03
[Epoch 93/ 100] [Batch 2/ 9] Loss: 1.62e-03
[Epoch 93/ 100] [Batch 3/ 9] Loss: 1.35e-03
[Epoch 93/ 100] [Batch 4/ 9] Loss: 1.77e-03
[Epoch 93/ 100] [Batch 5/ 9] Loss: 1.86e-03
[Epoch 93/ 100] [Batch 6/ 9] Loss: 1.59e-03
[Epoch 93/ 100] [Batch 7/ 9] Loss: 1.43e-03
[Epoch 93/ 100] [Batch 8/ 9] Loss: 1.30e-03
[Epoch 93/ 100] [Batch 9/ 9] Loss: 1.97e-03
[Epoch 94/ 100] [Batch 1/ 9] Loss: 1.64e-03
[Epoch 94/ 100] [Batch 2/ 9] Loss: 1.67e-03
[Epoch 94/ 100] [Batch 3/ 9] Loss: 1.33e-03
[Epoch 94/ 100] [Batch 4/ 9] Loss: 1.35e-03
[Epoch 94/ 100] [Batch 5/ 9] Loss: 1.22e-03
[Epoch 94/ 100] [Batch 6/ 9] Loss: 1.67e-03
[Epoch 94/ 100] [Batch 7/ 9] Loss: 1.32e-03
[Epoch 94/ 100] [Batch 8/ 9] Loss: 2.25e-03
[Epoch 94/ 100] [Batch 9/ 9] Loss: 1.63e-03
[Epoch 95/ 100] [Batch 1/ 9] Loss: 1.45e-03
[Epoch 95/ 100] [Batch 2/ 9] Loss: 1.61e-03
[Epoch 95/ 100] [Batch 3/ 9] Loss: 1.42e-03
[Epoch 95/ 100] [Batch 4/ 9] Loss: 1.63e-03
[Epoch 95/ 100] [Batch 5/ 9] Loss: 1.46e-03
[Epoch 95/ 100] [Batch 6/ 9] Loss: 1.63e-03
[Epoch 95/ 100] [Batch 7/ 9] Loss: 1.50e-03
[Epoch 95/ 100] [Batch 8/ 9] Loss: 1.82e-03
[Epoch 95/ 100] [Batch 9/ 9] Loss: 1.63e-03
[Epoch 96/ 100] [Batch 1/ 9] Loss: 2.01e-03
[Epoch 96/ 100] [Batch 2/ 9] Loss: 1.58e-03
[Epoch 96/ 100] [Batch 3/ 9] Loss: 1.28e-03
[Epoch 96/ 100] [Batch 4/ 9] Loss: 1.30e-03
[Epoch 96/ 100] [Batch 5/ 9] Loss: 1.47e-03
[Epoch 96/ 100] [Batch 6/ 9] Loss: 1.91e-03
[Epoch 96/ 100] [Batch 7/ 9] Loss: 1.39e-03
[Epoch 96/ 100] [Batch 8/ 9] Loss: 1.63e-03
[Epoch 96/ 100] [Batch 9/ 9] Loss: 1.54e-03
[Epoch 97/ 100] [Batch 1/ 9] Loss: 1.69e-03
[Epoch 97/ 100] [Batch 2/ 9] Loss: 1.39e-03
[Epoch 97/ 100] [Batch 3/ 9] Loss: 1.66e-03
[Epoch 97/ 100] [Batch 4/ 9] Loss: 1.57e-03
[Epoch 97/ 100] [Batch 5/ 9] Loss: 1.53e-03
[Epoch 97/ 100] [Batch 6/ 9] Loss: 1.78e-03
[Epoch 97/ 100] [Batch 7/ 9] Loss: 1.51e-03
[Epoch 97/ 100] [Batch 8/ 9] Loss: 1.56e-03
[Epoch 97/ 100] [Batch 9/ 9] Loss: 1.04e-03
[Epoch 98/ 100] [Batch 1/ 9] Loss: 1.97e-03
[Epoch 98/ 100] [Batch 2/ 9] Loss: 1.26e-03
[Epoch 98/ 100] [Batch 3/ 9] Loss: 1.59e-03
[Epoch 98/ 100] [Batch 4/ 9] Loss: 1.48e-03
[Epoch 98/ 100] [Batch 5/ 9] Loss: 1.69e-03
[Epoch 98/ 100] [Batch 6/ 9] Loss: 1.55e-03
[Epoch 98/ 100] [Batch 7/ 9] Loss: 1.50e-03
[Epoch 98/ 100] [Batch 8/ 9] Loss: 1.57e-03
[Epoch 98/ 100] [Batch 9/ 9] Loss: 1.51e-03
[Epoch 99/ 100] [Batch 1/ 9] Loss: 1.41e-03
[Epoch 99/ 100] [Batch 2/ 9] Loss: 1.47e-03
[Epoch 99/ 100] [Batch 3/ 9] Loss: 1.79e-03
[Epoch 99/ 100] [Batch 4/ 9] Loss: 1.81e-03
[Epoch 99/ 100] [Batch 5/ 9] Loss: 1.28e-03
[Epoch 99/ 100] [Batch 6/ 9] Loss: 1.95e-03
[Epoch 99/ 100] [Batch 7/ 9] Loss: 1.60e-03
[Epoch 99/ 100] [Batch 8/ 9] Loss: 1.27e-03
[Epoch 99/ 100] [Batch 9/ 9] Loss: 1.40e-03
[Epoch 100/ 100] [Batch 1/ 9] Loss: 1.79e-03
[Epoch 100/ 100] [Batch 2/ 9] Loss: 1.91e-03
[Epoch 100/ 100] [Batch 3/ 9] Loss: 1.53e-03
[Epoch 100/ 100] [Batch 4/ 9] Loss: 1.64e-03
[Epoch 100/ 100] [Batch 5/ 9] Loss: 1.82e-03
[Epoch 100/ 100] [Batch 6/ 9] Loss: 1.38e-03
[Epoch 100/ 100] [Batch 7/ 9] Loss: 1.26e-03
[Epoch 100/ 100] [Batch 8/ 9] Loss: 1.38e-03
[Epoch 100/ 100] [Batch 9/ 9] Loss: 1.28e-03
LinearModel(
(linear): Linear(in_features=1, out_features=1, bias=True)
)
[ ]:
if input_dim == output_dim == 1:
n_test = 500
X_test = np.random.rand(n_test, input_dim)
y_pred = []
state_dict = model.state_dict()
for idx in range(len(train_hist['weight'])):
state_dict['linear.weight'] = torch.tensor([[train_hist['weight'][idx]]])
state_dict['linear.bias'] = torch.tensor([train_hist['bias'][idx]])
model.load_state_dict(state_dict)
y_pred.append(model.forward(torch.tensor(X_test.astype('f'))).detach().numpy())
[ ]:
if input_dim == output_dim == 1:
fig = plt.figure(figsize=(15, 5))
fig.clf()
ax = fig.add_subplot(1, 3, 1)
levels = np.logspace(np.log(np.min(loss_values)), np.log(np.max(loss_values)), 20)
ax.contourf(ww, bb, loss_values, levels=levels, norm=colors.LogNorm())
ax.plot(train_hist['weight'], train_hist['bias'], '.-b')
ax.plot(A[0], b, 'r*', markersize=10)
ax.set_xlabel('weight')
ax.set_ylabel('bias')
#ax.legend(['optim', '(A, b)'])
ax.grid(True)
ax.set_xlim(-2, 2)
ax.set_ylim(-2, 2)
ax = fig.add_subplot(1, 3, 2)
ax.loglog(np.abs(train_hist['loss']))
ax.set_xlabel('Iter')
ax.set_ylabel('Loss')
ax.grid(True)
ax = fig.add_subplot(1, 3, 3)
ax.plot(X_train, y_train, '.')
a=ax.plot(X_test, y_pred[0], '-', alpha=0.1)
for y in y_pred[1:]:
ax.plot(X_test, y, '-', alpha=0.1, color=a[0].get_color())
ax.plot(X_test, y_pred[-1], 'k')
ax.grid(True)
fig.tight_layout()
else:
fig = plt.figure()
fig.clf()
ax = fig.gca()
ax.loglog(np.abs(train_hist['loss']))
ax.set_xlabel('Iter')
ax.set_ylabel('Loss')
ax.grid(True)