# reference
# https://www.youtube.com/watch?v=OSA5fZZwEW4
from IPython.display import display, clear_output
import ipywidgets as widgets
from ipywidgets import interact, interactive, fixed, interact_manual
import pandas as pd
import numpy as np
from os import listdir
import shutil
import os
import torch
import torch.nn as nn
from torchvision import datasets, transforms, models
from torch.utils.data import DataLoader
from torch import optim
from PIL import Image
import pandas as pd
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from os import listdir
import shutil
import os
import torch
import torch.nn as nn
from torchvision import datasets, transforms, models
from torch.utils.data import DataLoader
from torch import optim
from PIL import Image
import pandas as pd
import matplotlib.pyplot as plt
class EllipseModel(nn.Module):
def __init__(self, n, use_cuda=True):
super(EllipseModel, self).__init__()
self.num = n
self.fr = 8 # Fourier terms
self.use_cuda = use_cuda
self.posx = torch.nn.Parameter(
torch.rand((self.num), requires_grad=True))
self.posy = torch.nn.Parameter(
torch.rand((self.num), requires_grad=True))
self.radius = torch.nn.Parameter(-3.0 *
torch.randn((self.num), requires_grad=True))
self.fweights_sin = torch.nn.Parameter(
torch.rand((self.fr, self.num), requires_grad=True))
self.fweights_cos = torch.nn.Parameter(
torch.rand((self.fr, self.num), requires_grad=True))
self.scale_x = torch.nn.Parameter(
torch.rand((self.num), requires_grad=True))
self.scale_y = torch.nn.Parameter(
torch.rand((self.num), requires_grad=True))
self.colors = torch.nn.Parameter(
torch.zeros((self.num, 3), requires_grad=True))
self.rotate = torch.nn.Parameter(
torch.rand((self.num), requires_grad=True))
self.order = torch.nn.Parameter(
torch.rand((self.num), requires_grad=True))
def forward(self, isize, t):
posx = (self.posx.tanh())* 1.0
posy = (self.posy.tanh())* 1.0
radius = (self.radius.sigmoid()) * 8.0
colors = (self.colors).tanh()* 8.0
# background = (self.background).sigmoid() + 0.5
rotate = 3.141592 * self.rotate.sigmoid()* 8.0
scale_x = (self.scale_x).sigmoid()* 8.0
scale_y = (self.scale_y).sigmoid()* 8.0
order = self.order.sigmoid() * 16.0
fweights_sin = self.fweights_sin.sigmoid() * 8.0
fweights_cos = self.fweights_cos.sigmoid() * 8.0
fr = self.fr # Fourier terms
X = torch.unsqueeze(torch.arange(
0.5, isize + 0.5, 1) / isize, 0)
Y = torch.unsqueeze(torch.arange(
0.5, isize + 0.5, 1) / isize, 0)
I = torch.unsqueeze(torch.ones(isize), 0)
if self.use_cuda:
X = X.cuda()
Y = Y.cuda()
I = I.cuda()
X = X * I
Y = torch.transpose(Y * I, 0, 1)
X = X.unsqueeze_(0)
Y = Y.unsqueeze_(0)
X = X.expand(self.num, 1, isize, isize) - \
posx.reshape(self.num, 1, 1, 1)
Y = Y.expand(self.num, 1, isize, isize) - \
posy.reshape(self.num, 1, 1, 1)
X, Y = X * (rotate.reshape(self.num, 1, 1, 1).cos()) - Y * (rotate.reshape(self.num, 1, 1, 1,).sin()), \
X * (rotate.reshape(self.num, 1, 1, 1).sin()) + \
Y * (rotate.reshape(self.num, 1, 1, 1).cos())
X = scale_x.reshape(self.num, 1, 1, 1) * X
Y = scale_y.reshape(self.num, 1, 1, 1) * Y
R = torch.sqrt(X.square() + Y.square())
theta = -1.0 * (torch.acos(X / (R + 0.0001)) *
(1.0 * (Y > 0.0) - 1.0 * (Y < 0.0)))
fourier = torch.arange(1, fr + 1).expand(self.num,
fr).permute(1, 0).reshape(fr, self.num, 1, 1, 1)
if self.use_cuda:
fourier = fourier.cuda()
fourier = (fourier * (theta.expand(fr, self.num, 1, isize, isize)))
fourier = (fweights_sin.reshape(fr, self.num, 1, 1, 1) * fourier.sin() +
fweights_cos.reshape(fr, self.num, 1, 1, 1) * fourier.cos()).sum(0)
filter_values = (radius.reshape(self.num, 1, 1, 1) *
(1.0 + 0.1 * fourier) - R) / radius.reshape(self.num, 1, 1, 1)
# filter_values = (radius.reshape(self.num, 1, 1, 1) - R)
sharpness = 16.0
filters_soft = torch.tanh(sharpness * filter_values)
# weights = 10.0*(1.0-torch.mean(1.0*(filters_soft > 0), (2, 3),
# keepdim=True))
# # * order.reshape(self.num, 1, 1, 1)
# filter_sort = torch.exp(t*(torch.argsort(
# torch.argsort(weights*1.0, 0, descending=True), 0)))
filter_order = torch.exp(-order.reshape(self.num, 1, 1, 1))
filters2 = filters_soft * (filters_soft > 0.0)
# filters2 = filters2 / (0.0001+torch.sum(filters2, 0, keepdim=True))
# filters2 = filters_soft * (filters_soft > 0)
return (filter_order, filters2, radius, colors)
isize = 256
experiment_number = 5
img = Image.open("example_input_" + str(experiment_number) + ".png").convert("RGB")
transform = transforms.Compose([
transforms.Resize(isize),
transforms.CenterCrop(isize),
transforms.ToTensor()
])
img = transform(img)
img = img.cuda()
avg_pool = nn.AvgPool2d(21, stride=1, padding=10)
avg_img = avg_pool(img)
img_var = avg_pool((img - avg_img).square()).sqrt()
# plt.imsave("src.png", img)
num = 512
# model = WaveModel(num)
model = EllipseModel(num, use_cuda=True)
# try:
# model.load_state_dict(torch.load('model.ckpt'))
# except:
# pass
model = model.cuda()
optimizer = optim.AdamW(model.parameters(), lr=0.005)
out = None
num_epochs = 1000
try:
shutil.rmtree('.scratch')
except:
pass
os.mkdir('.scratch')
def brightness(val):
return torch.sqrt(0.241*(val[0]**2) + 0.691*(val[1]**2) + 0.068*(val[2]**2))
for epoch in range(0, num_epochs):
torch.cuda.empty_cache()
filter_order, filters2, radius, colors = model(isize, -16.0)
rgb = torch.sum(colors.reshape((num, 3, 1, 1))*filter_order.expand(num, 3, isize, isize) * filters2.expand(num, 3, isize, isize), (0),
keepdim=True)/(torch.sum(filter_order * filters2.expand(num, 3, isize, isize), (0), keepdim=True)+0.00001)
out = torch.sum(rgb, 0)
# pic_loss = (((( (img-out) )))).abs().mean()
pic_loss = (((( (img-out) ).square()))).mean().sqrt()
# pic_loss = ((((brightness( (img-out)) ).square()))).mean().sqrt()
# pic_loss = (brightness(img-out)/brightness(avg_img) ).square().mean().sqrt()
# pic_loss = ((((( img_var*(img-out))/avg_img ).square()))).mean().sqrt()
loss = pic_loss
optimizer.zero_grad()
loss.backward()
optimizer.step()
out = out.clamp(0.0, 1.0)
plt.imsave(".scratch/out_" + str(epoch) + ".png",
out.permute(1, 2, 0).detach().cpu().numpy())
print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')
torch.save(model.state_dict(), 'model.ckpt')
Epoch [1/1000], Loss: 0.4403 Epoch [2/1000], Loss: 0.4071 Epoch [3/1000], Loss: 0.3754 Epoch [4/1000], Loss: 0.3454 Epoch [5/1000], Loss: 0.3177 Epoch [6/1000], Loss: 0.2929 Epoch [7/1000], Loss: 0.2717 Epoch [8/1000], Loss: 0.2547 Epoch [9/1000], Loss: 0.2422 Epoch [10/1000], Loss: 0.2341 Epoch [11/1000], Loss: 0.2298 Epoch [12/1000], Loss: 0.2284 Epoch [13/1000], Loss: 0.2289 Epoch [14/1000], Loss: 0.2306 Epoch [15/1000], Loss: 0.2326 Epoch [16/1000], Loss: 0.2344 Epoch [17/1000], Loss: 0.2356 Epoch [18/1000], Loss: 0.2361 Epoch [19/1000], Loss: 0.2357 Epoch [20/1000], Loss: 0.2346 Epoch [21/1000], Loss: 0.2328 Epoch [22/1000], Loss: 0.2304 Epoch [23/1000], Loss: 0.2277 Epoch [24/1000], Loss: 0.2247 Epoch [25/1000], Loss: 0.2216 Epoch [26/1000], Loss: 0.2186 Epoch [27/1000], Loss: 0.2159 Epoch [28/1000], Loss: 0.2136 Epoch [29/1000], Loss: 0.2117 Epoch [30/1000], Loss: 0.2104 Epoch [31/1000], Loss: 0.2095 Epoch [32/1000], Loss: 0.2089 Epoch [33/1000], Loss: 0.2084 Epoch [34/1000], Loss: 0.2080 Epoch [35/1000], Loss: 0.2074 Epoch [36/1000], Loss: 0.2066 Epoch [37/1000], Loss: 0.2056 Epoch [38/1000], Loss: 0.2043 Epoch [39/1000], Loss: 0.2028 Epoch [40/1000], Loss: 0.2014 Epoch [41/1000], Loss: 0.1999 Epoch [42/1000], Loss: 0.1985 Epoch [43/1000], Loss: 0.1974 Epoch [44/1000], Loss: 0.1963 Epoch [45/1000], Loss: 0.1954 Epoch [46/1000], Loss: 0.1946 Epoch [47/1000], Loss: 0.1939 Epoch [48/1000], Loss: 0.1932 Epoch [49/1000], Loss: 0.1924 Epoch [50/1000], Loss: 0.1916 Epoch [51/1000], Loss: 0.1907 Epoch [52/1000], Loss: 0.1899 Epoch [53/1000], Loss: 0.1891 Epoch [54/1000], Loss: 0.1883 Epoch [55/1000], Loss: 0.1876 Epoch [56/1000], Loss: 0.1869 Epoch [57/1000], Loss: 0.1863 Epoch [58/1000], Loss: 0.1856 Epoch [59/1000], Loss: 0.1850 Epoch [60/1000], Loss: 0.1844 Epoch [61/1000], Loss: 0.1838 Epoch [62/1000], Loss: 0.1832 Epoch [63/1000], Loss: 0.1826 Epoch [64/1000], Loss: 0.1821 Epoch [65/1000], Loss: 0.1816 Epoch [66/1000], Loss: 0.1811 Epoch [67/1000], Loss: 0.1806 Epoch [68/1000], Loss: 0.1801 Epoch [69/1000], Loss: 0.1796 Epoch [70/1000], Loss: 0.1791 Epoch [71/1000], Loss: 0.1786 Epoch [72/1000], Loss: 0.1781 Epoch [73/1000], Loss: 0.1776 Epoch [74/1000], Loss: 0.1771 Epoch [75/1000], Loss: 0.1767 Epoch [76/1000], Loss: 0.1762 Epoch [77/1000], Loss: 0.1757 Epoch [78/1000], Loss: 0.1752 Epoch [79/1000], Loss: 0.1747 Epoch [80/1000], Loss: 0.1743 Epoch [81/1000], Loss: 0.1738 Epoch [82/1000], Loss: 0.1733 Epoch [83/1000], Loss: 0.1729 Epoch [84/1000], Loss: 0.1724 Epoch [85/1000], Loss: 0.1720 Epoch [86/1000], Loss: 0.1715 Epoch [87/1000], Loss: 0.1711 Epoch [88/1000], Loss: 0.1707 Epoch [89/1000], Loss: 0.1703 Epoch [90/1000], Loss: 0.1699 Epoch [91/1000], Loss: 0.1694 Epoch [92/1000], Loss: 0.1690 Epoch [93/1000], Loss: 0.1686 Epoch [94/1000], Loss: 0.1682 Epoch [95/1000], Loss: 0.1677 Epoch [96/1000], Loss: 0.1673 Epoch [97/1000], Loss: 0.1668 Epoch [98/1000], Loss: 0.1664 Epoch [99/1000], Loss: 0.1660 Epoch [100/1000], Loss: 0.1656 Epoch [101/1000], Loss: 0.1652 Epoch [102/1000], Loss: 0.1647 Epoch [103/1000], Loss: 0.1643 Epoch [104/1000], Loss: 0.1639 Epoch [105/1000], Loss: 0.1635 Epoch [106/1000], Loss: 0.1631 Epoch [107/1000], Loss: 0.1626 Epoch [108/1000], Loss: 0.1622 Epoch [109/1000], Loss: 0.1619 Epoch [110/1000], Loss: 0.1615 Epoch [111/1000], Loss: 0.1611 Epoch [112/1000], Loss: 0.1607 Epoch [113/1000], Loss: 0.1603 Epoch [114/1000], Loss: 0.1599 Epoch [115/1000], Loss: 0.1595 Epoch [116/1000], Loss: 0.1591 Epoch [117/1000], Loss: 0.1588 Epoch [118/1000], Loss: 0.1584 Epoch [119/1000], Loss: 0.1580 Epoch [120/1000], Loss: 0.1576 Epoch [121/1000], Loss: 0.1573 Epoch [122/1000], Loss: 0.1569 Epoch [123/1000], Loss: 0.1565 Epoch [124/1000], Loss: 0.1562 Epoch [125/1000], Loss: 0.1558 Epoch [126/1000], Loss: 0.1555 Epoch [127/1000], Loss: 0.1551 Epoch [128/1000], Loss: 0.1548 Epoch [129/1000], Loss: 0.1545 Epoch [130/1000], Loss: 0.1541 Epoch [131/1000], Loss: 0.1538 Epoch [132/1000], Loss: 0.1534 Epoch [133/1000], Loss: 0.1531 Epoch [134/1000], Loss: 0.1528 Epoch [135/1000], Loss: 0.1525 Epoch [136/1000], Loss: 0.1521 Epoch [137/1000], Loss: 0.1518 Epoch [138/1000], Loss: 0.1515 Epoch [139/1000], Loss: 0.1512 Epoch [140/1000], Loss: 0.1509 Epoch [141/1000], Loss: 0.1506 Epoch [142/1000], Loss: 0.1503 Epoch [143/1000], Loss: 0.1500 Epoch [144/1000], Loss: 0.1497 Epoch [145/1000], Loss: 0.1494 Epoch [146/1000], Loss: 0.1490 Epoch [147/1000], Loss: 0.1487 Epoch [148/1000], Loss: 0.1485 Epoch [149/1000], Loss: 0.1482 Epoch [150/1000], Loss: 0.1479 Epoch [151/1000], Loss: 0.1476 Epoch [152/1000], Loss: 0.1473 Epoch [153/1000], Loss: 0.1470 Epoch [154/1000], Loss: 0.1467 Epoch [155/1000], Loss: 0.1464 Epoch [156/1000], Loss: 0.1462 Epoch [157/1000], Loss: 0.1459 Epoch [158/1000], Loss: 0.1457 Epoch [159/1000], Loss: 0.1454 Epoch [160/1000], Loss: 0.1452 Epoch [161/1000], Loss: 0.1449 Epoch [162/1000], Loss: 0.1447 Epoch [163/1000], Loss: 0.1445 Epoch [164/1000], Loss: 0.1442 Epoch [165/1000], Loss: 0.1440 Epoch [166/1000], Loss: 0.1438 Epoch [167/1000], Loss: 0.1436 Epoch [168/1000], Loss: 0.1434 Epoch [169/1000], Loss: 0.1431 Epoch [170/1000], Loss: 0.1429 Epoch [171/1000], Loss: 0.1428 Epoch [172/1000], Loss: 0.1426 Epoch [173/1000], Loss: 0.1423 Epoch [174/1000], Loss: 0.1421 Epoch [175/1000], Loss: 0.1419 Epoch [176/1000], Loss: 0.1417 Epoch [177/1000], Loss: 0.1415 Epoch [178/1000], Loss: 0.1413 Epoch [179/1000], Loss: 0.1411 Epoch [180/1000], Loss: 0.1410 Epoch [181/1000], Loss: 0.1408 Epoch [182/1000], Loss: 0.1406 Epoch [183/1000], Loss: 0.1404 Epoch [184/1000], Loss: 0.1402 Epoch [185/1000], Loss: 0.1400 Epoch [186/1000], Loss: 0.1398 Epoch [187/1000], Loss: 0.1396 Epoch [188/1000], Loss: 0.1395 Epoch [189/1000], Loss: 0.1393 Epoch [190/1000], Loss: 0.1391 Epoch [191/1000], Loss: 0.1389 Epoch [192/1000], Loss: 0.1388 Epoch [193/1000], Loss: 0.1387 Epoch [194/1000], Loss: 0.1384 Epoch [195/1000], Loss: 0.1383 Epoch [196/1000], Loss: 0.1381 Epoch [197/1000], Loss: 0.1379 Epoch [198/1000], Loss: 0.1377 Epoch [199/1000], Loss: 0.1376 Epoch [200/1000], Loss: 0.1374 Epoch [201/1000], Loss: 0.1372 Epoch [202/1000], Loss: 0.1371 Epoch [203/1000], Loss: 0.1369 Epoch [204/1000], Loss: 0.1368 Epoch [205/1000], Loss: 0.1366 Epoch [206/1000], Loss: 0.1364 Epoch [207/1000], Loss: 0.1363 Epoch [208/1000], Loss: 0.1361 Epoch [209/1000], Loss: 0.1360 Epoch [210/1000], Loss: 0.1359 Epoch [211/1000], Loss: 0.1357 Epoch [212/1000], Loss: 0.1355 Epoch [213/1000], Loss: 0.1354 Epoch [214/1000], Loss: 0.1352 Epoch [215/1000], Loss: 0.1351 Epoch [216/1000], Loss: 0.1349 Epoch [217/1000], Loss: 0.1347 Epoch [218/1000], Loss: 0.1346 Epoch [219/1000], Loss: 0.1345 Epoch [220/1000], Loss: 0.1343 Epoch [221/1000], Loss: 0.1342 Epoch [222/1000], Loss: 0.1340 Epoch [223/1000], Loss: 0.1339 Epoch [224/1000], Loss: 0.1338 Epoch [225/1000], Loss: 0.1336 Epoch [226/1000], Loss: 0.1335 Epoch [227/1000], Loss: 0.1333 Epoch [228/1000], Loss: 0.1332 Epoch [229/1000], Loss: 0.1331 Epoch [230/1000], Loss: 0.1329 Epoch [231/1000], Loss: 0.1328 Epoch [232/1000], Loss: 0.1326 Epoch [233/1000], Loss: 0.1325 Epoch [234/1000], Loss: 0.1324 Epoch [235/1000], Loss: 0.1322 Epoch [236/1000], Loss: 0.1321 Epoch [237/1000], Loss: 0.1320 Epoch [238/1000], Loss: 0.1319 Epoch [239/1000], Loss: 0.1318 Epoch [240/1000], Loss: 0.1317 Epoch [241/1000], Loss: 0.1315 Epoch [242/1000], Loss: 0.1315 Epoch [243/1000], Loss: 0.1314 Epoch [244/1000], Loss: 0.1312 Epoch [245/1000], Loss: 0.1311 Epoch [246/1000], Loss: 0.1309 Epoch [247/1000], Loss: 0.1308 Epoch [248/1000], Loss: 0.1307 Epoch [249/1000], Loss: 0.1306 Epoch [250/1000], Loss: 0.1305 Epoch [251/1000], Loss: 0.1304 Epoch [252/1000], Loss: 0.1303 Epoch [253/1000], Loss: 0.1301 Epoch [254/1000], Loss: 0.1300 Epoch [255/1000], Loss: 0.1299 Epoch [256/1000], Loss: 0.1298 Epoch [257/1000], Loss: 0.1297 Epoch [258/1000], Loss: 0.1296 Epoch [259/1000], Loss: 0.1295 Epoch [260/1000], Loss: 0.1294 Epoch [261/1000], Loss: 0.1292 Epoch [262/1000], Loss: 0.1292 Epoch [263/1000], Loss: 0.1291 Epoch [264/1000], Loss: 0.1290 Epoch [265/1000], Loss: 0.1289 Epoch [266/1000], Loss: 0.1288 Epoch [267/1000], Loss: 0.1287 Epoch [268/1000], Loss: 0.1286 Epoch [269/1000], Loss: 0.1285 Epoch [270/1000], Loss: 0.1284 Epoch [271/1000], Loss: 0.1283 Epoch [272/1000], Loss: 0.1282 Epoch [273/1000], Loss: 0.1281 Epoch [274/1000], Loss: 0.1280 Epoch [275/1000], Loss: 0.1280 Epoch [276/1000], Loss: 0.1278 Epoch [277/1000], Loss: 0.1277 Epoch [278/1000], Loss: 0.1277 Epoch [279/1000], Loss: 0.1276 Epoch [280/1000], Loss: 0.1276 Epoch [281/1000], Loss: 0.1273 Epoch [282/1000], Loss: 0.1274 Epoch [283/1000], Loss: 0.1273 Epoch [284/1000], Loss: 0.1273 Epoch [285/1000], Loss: 0.1271 Epoch [286/1000], Loss: 0.1269 Epoch [287/1000], Loss: 0.1270 Epoch [288/1000], Loss: 0.1267 Epoch [289/1000], Loss: 0.1267 Epoch [290/1000], Loss: 0.1265 Epoch [291/1000], Loss: 0.1266 Epoch [292/1000], Loss: 0.1263 Epoch [293/1000], Loss: 0.1263 Epoch [294/1000], Loss: 0.1262 Epoch [295/1000], Loss: 0.1262 Epoch [296/1000], Loss: 0.1259 Epoch [297/1000], Loss: 0.1260 Epoch [298/1000], Loss: 0.1258 Epoch [299/1000], Loss: 0.1257 Epoch [300/1000], Loss: 0.1256 Epoch [301/1000], Loss: 0.1256 Epoch [302/1000], Loss: 0.1254 Epoch [303/1000], Loss: 0.1254 Epoch [304/1000], Loss: 0.1252 Epoch [305/1000], Loss: 0.1252 Epoch [306/1000], Loss: 0.1250 Epoch [307/1000], Loss: 0.1250 Epoch [308/1000], Loss: 0.1250 Epoch [309/1000], Loss: 0.1249 Epoch [310/1000], Loss: 0.1247 Epoch [311/1000], Loss: 0.1247 Epoch [312/1000], Loss: 0.1245 Epoch [313/1000], Loss: 0.1245 Epoch [314/1000], Loss: 0.1243 Epoch [315/1000], Loss: 0.1243 Epoch [316/1000], Loss: 0.1242 Epoch [317/1000], Loss: 0.1241 Epoch [318/1000], Loss: 0.1240 Epoch [319/1000], Loss: 0.1239 Epoch [320/1000], Loss: 0.1239 Epoch [321/1000], Loss: 0.1237 Epoch [322/1000], Loss: 0.1236 Epoch [323/1000], Loss: 0.1236 Epoch [324/1000], Loss: 0.1235 Epoch [325/1000], Loss: 0.1234 Epoch [326/1000], Loss: 0.1233 Epoch [327/1000], Loss: 0.1233 Epoch [328/1000], Loss: 0.1232 Epoch [329/1000], Loss: 0.1231 Epoch [330/1000], Loss: 0.1230 Epoch [331/1000], Loss: 0.1230 Epoch [332/1000], Loss: 0.1229 Epoch [333/1000], Loss: 0.1228 Epoch [334/1000], Loss: 0.1227 Epoch [335/1000], Loss: 0.1227 Epoch [336/1000], Loss: 0.1226 Epoch [337/1000], Loss: 0.1226 Epoch [338/1000], Loss: 0.1225 Epoch [339/1000], Loss: 0.1224 Epoch [340/1000], Loss: 0.1224 Epoch [341/1000], Loss: 0.1223 Epoch [342/1000], Loss: 0.1222 Epoch [343/1000], Loss: 0.1221 Epoch [344/1000], Loss: 0.1220 Epoch [345/1000], Loss: 0.1220 Epoch [346/1000], Loss: 0.1219 Epoch [347/1000], Loss: 0.1218 Epoch [348/1000], Loss: 0.1218 Epoch [349/1000], Loss: 0.1218 Epoch [350/1000], Loss: 0.1217 Epoch [351/1000], Loss: 0.1217 Epoch [352/1000], Loss: 0.1215 Epoch [353/1000], Loss: 0.1215 Epoch [354/1000], Loss: 0.1215 Epoch [355/1000], Loss: 0.1214 Epoch [356/1000], Loss: 0.1212 Epoch [357/1000], Loss: 0.1212 Epoch [358/1000], Loss: 0.1211 Epoch [359/1000], Loss: 0.1210 Epoch [360/1000], Loss: 0.1210 Epoch [361/1000], Loss: 0.1210 Epoch [362/1000], Loss: 0.1209 Epoch [363/1000], Loss: 0.1208 Epoch [364/1000], Loss: 0.1207 Epoch [365/1000], Loss: 0.1207 Epoch [366/1000], Loss: 0.1207 Epoch [367/1000], Loss: 0.1206 Epoch [368/1000], Loss: 0.1205 Epoch [369/1000], Loss: 0.1204 Epoch [370/1000], Loss: 0.1203 Epoch [371/1000], Loss: 0.1203 Epoch [372/1000], Loss: 0.1203 Epoch [373/1000], Loss: 0.1202 Epoch [374/1000], Loss: 0.1201 Epoch [375/1000], Loss: 0.1200 Epoch [376/1000], Loss: 0.1200 Epoch [377/1000], Loss: 0.1200 Epoch [378/1000], Loss: 0.1199 Epoch [379/1000], Loss: 0.1198 Epoch [380/1000], Loss: 0.1197 Epoch [381/1000], Loss: 0.1197 Epoch [382/1000], Loss: 0.1196 Epoch [383/1000], Loss: 0.1196 Epoch [384/1000], Loss: 0.1194 Epoch [385/1000], Loss: 0.1194 Epoch [386/1000], Loss: 0.1194 Epoch [387/1000], Loss: 0.1193 Epoch [388/1000], Loss: 0.1193 Epoch [389/1000], Loss: 0.1192 Epoch [390/1000], Loss: 0.1191 Epoch [391/1000], Loss: 0.1191 Epoch [392/1000], Loss: 0.1190 Epoch [393/1000], Loss: 0.1190 Epoch [394/1000], Loss: 0.1189 Epoch [395/1000], Loss: 0.1188 Epoch [396/1000], Loss: 0.1188 Epoch [397/1000], Loss: 0.1188 Epoch [398/1000], Loss: 0.1188 Epoch [399/1000], Loss: 0.1187 Epoch [400/1000], Loss: 0.1186 Epoch [401/1000], Loss: 0.1185 Epoch [402/1000], Loss: 0.1185 Epoch [403/1000], Loss: 0.1185 Epoch [404/1000], Loss: 0.1184 Epoch [405/1000], Loss: 0.1183 Epoch [406/1000], Loss: 0.1183 Epoch [407/1000], Loss: 0.1183 Epoch [408/1000], Loss: 0.1183 Epoch [409/1000], Loss: 0.1183 Epoch [410/1000], Loss: 0.1181 Epoch [411/1000], Loss: 0.1180 Epoch [412/1000], Loss: 0.1180 Epoch [413/1000], Loss: 0.1180 Epoch [414/1000], Loss: 0.1179 Epoch [415/1000], Loss: 0.1178 Epoch [416/1000], Loss: 0.1178 Epoch [417/1000], Loss: 0.1177 Epoch [418/1000], Loss: 0.1177 Epoch [419/1000], Loss: 0.1177 Epoch [420/1000], Loss: 0.1176 Epoch [421/1000], Loss: 0.1176 Epoch [422/1000], Loss: 0.1175 Epoch [423/1000], Loss: 0.1175 Epoch [424/1000], Loss: 0.1174 Epoch [425/1000], Loss: 0.1173 Epoch [426/1000], Loss: 0.1173 Epoch [427/1000], Loss: 0.1173 Epoch [428/1000], Loss: 0.1172 Epoch [429/1000], Loss: 0.1172 Epoch [430/1000], Loss: 0.1171 Epoch [431/1000], Loss: 0.1171 Epoch [432/1000], Loss: 0.1170 Epoch [433/1000], Loss: 0.1170 Epoch [434/1000], Loss: 0.1170 Epoch [435/1000], Loss: 0.1169 Epoch [436/1000], Loss: 0.1169 Epoch [437/1000], Loss: 0.1168 Epoch [438/1000], Loss: 0.1168 Epoch [439/1000], Loss: 0.1167 Epoch [440/1000], Loss: 0.1167 Epoch [441/1000], Loss: 0.1166 Epoch [442/1000], Loss: 0.1166 Epoch [443/1000], Loss: 0.1165 Epoch [444/1000], Loss: 0.1165 Epoch [445/1000], Loss: 0.1165 Epoch [446/1000], Loss: 0.1164 Epoch [447/1000], Loss: 0.1164 Epoch [448/1000], Loss: 0.1164 Epoch [449/1000], Loss: 0.1163 Epoch [450/1000], Loss: 0.1163 Epoch [451/1000], Loss: 0.1162 Epoch [452/1000], Loss: 0.1162 Epoch [453/1000], Loss: 0.1161 Epoch [454/1000], Loss: 0.1161 Epoch [455/1000], Loss: 0.1161 Epoch [456/1000], Loss: 0.1160 Epoch [457/1000], Loss: 0.1160 Epoch [458/1000], Loss: 0.1160 Epoch [459/1000], Loss: 0.1159 Epoch [460/1000], Loss: 0.1159 Epoch [461/1000], Loss: 0.1158 Epoch [462/1000], Loss: 0.1158 Epoch [463/1000], Loss: 0.1157 Epoch [464/1000], Loss: 0.1157 Epoch [465/1000], Loss: 0.1156 Epoch [466/1000], Loss: 0.1156 Epoch [467/1000], Loss: 0.1157 Epoch [468/1000], Loss: 0.1156 Epoch [469/1000], Loss: 0.1155 Epoch [470/1000], Loss: 0.1155 Epoch [471/1000], Loss: 0.1154 Epoch [472/1000], Loss: 0.1153 Epoch [473/1000], Loss: 0.1153 Epoch [474/1000], Loss: 0.1153 Epoch [475/1000], Loss: 0.1152 Epoch [476/1000], Loss: 0.1152 Epoch [477/1000], Loss: 0.1152 Epoch [478/1000], Loss: 0.1152 Epoch [479/1000], Loss: 0.1151 Epoch [480/1000], Loss: 0.1151 Epoch [481/1000], Loss: 0.1150 Epoch [482/1000], Loss: 0.1150 Epoch [483/1000], Loss: 0.1149 Epoch [484/1000], Loss: 0.1149 Epoch [485/1000], Loss: 0.1148 Epoch [486/1000], Loss: 0.1148 Epoch [487/1000], Loss: 0.1148 Epoch [488/1000], Loss: 0.1148 Epoch [489/1000], Loss: 0.1147 Epoch [490/1000], Loss: 0.1147 Epoch [491/1000], Loss: 0.1147 Epoch [492/1000], Loss: 0.1146 Epoch [493/1000], Loss: 0.1146 Epoch [494/1000], Loss: 0.1145 Epoch [495/1000], Loss: 0.1144 Epoch [496/1000], Loss: 0.1144 Epoch [497/1000], Loss: 0.1144 Epoch [498/1000], Loss: 0.1144 Epoch [499/1000], Loss: 0.1144 Epoch [500/1000], Loss: 0.1144 Epoch [501/1000], Loss: 0.1144 Epoch [502/1000], Loss: 0.1143 Epoch [503/1000], Loss: 0.1142 Epoch [504/1000], Loss: 0.1142 Epoch [505/1000], Loss: 0.1141 Epoch [506/1000], Loss: 0.1141 Epoch [507/1000], Loss: 0.1141 Epoch [508/1000], Loss: 0.1141 Epoch [509/1000], Loss: 0.1141 Epoch [510/1000], Loss: 0.1140 Epoch [511/1000], Loss: 0.1139 Epoch [512/1000], Loss: 0.1139 Epoch [513/1000], Loss: 0.1138 Epoch [514/1000], Loss: 0.1138 Epoch [515/1000], Loss: 0.1138 Epoch [516/1000], Loss: 0.1138 Epoch [517/1000], Loss: 0.1138 Epoch [518/1000], Loss: 0.1137 Epoch [519/1000], Loss: 0.1137 Epoch [520/1000], Loss: 0.1136 Epoch [521/1000], Loss: 0.1136 Epoch [522/1000], Loss: 0.1135 Epoch [523/1000], Loss: 0.1135 Epoch [524/1000], Loss: 0.1135 Epoch [525/1000], Loss: 0.1135 Epoch [526/1000], Loss: 0.1134 Epoch [527/1000], Loss: 0.1135 Epoch [528/1000], Loss: 0.1134 Epoch [529/1000], Loss: 0.1134 Epoch [530/1000], Loss: 0.1133 Epoch [531/1000], Loss: 0.1132 Epoch [532/1000], Loss: 0.1132 Epoch [533/1000], Loss: 0.1132 Epoch [534/1000], Loss: 0.1132 Epoch [535/1000], Loss: 0.1131 Epoch [536/1000], Loss: 0.1131 Epoch [537/1000], Loss: 0.1131 Epoch [538/1000], Loss: 0.1131 Epoch [539/1000], Loss: 0.1131 Epoch [540/1000], Loss: 0.1130 Epoch [541/1000], Loss: 0.1130 Epoch [542/1000], Loss: 0.1129 Epoch [543/1000], Loss: 0.1129 Epoch [544/1000], Loss: 0.1128 Epoch [545/1000], Loss: 0.1128 Epoch [546/1000], Loss: 0.1128 Epoch [547/1000], Loss: 0.1128 Epoch [548/1000], Loss: 0.1128 Epoch [549/1000], Loss: 0.1128 Epoch [550/1000], Loss: 0.1127 Epoch [551/1000], Loss: 0.1127 Epoch [552/1000], Loss: 0.1127 Epoch [553/1000], Loss: 0.1126 Epoch [554/1000], Loss: 0.1126 Epoch [555/1000], Loss: 0.1125 Epoch [556/1000], Loss: 0.1125 Epoch [557/1000], Loss: 0.1124 Epoch [558/1000], Loss: 0.1124 Epoch [559/1000], Loss: 0.1124 Epoch [560/1000], Loss: 0.1124 Epoch [561/1000], Loss: 0.1124 Epoch [562/1000], Loss: 0.1124 Epoch [563/1000], Loss: 0.1123 Epoch [564/1000], Loss: 0.1123 Epoch [565/1000], Loss: 0.1122 Epoch [566/1000], Loss: 0.1122 Epoch [567/1000], Loss: 0.1122 Epoch [568/1000], Loss: 0.1122 Epoch [569/1000], Loss: 0.1121 Epoch [570/1000], Loss: 0.1121 Epoch [571/1000], Loss: 0.1121 Epoch [572/1000], Loss: 0.1121 Epoch [573/1000], Loss: 0.1120 Epoch [574/1000], Loss: 0.1120 Epoch [575/1000], Loss: 0.1119 Epoch [576/1000], Loss: 0.1119 Epoch [577/1000], Loss: 0.1119 Epoch [578/1000], Loss: 0.1119 Epoch [579/1000], Loss: 0.1119 Epoch [580/1000], Loss: 0.1118 Epoch [581/1000], Loss: 0.1119 Epoch [582/1000], Loss: 0.1118 Epoch [583/1000], Loss: 0.1118 Epoch [584/1000], Loss: 0.1117 Epoch [585/1000], Loss: 0.1117 Epoch [586/1000], Loss: 0.1116 Epoch [587/1000], Loss: 0.1116 Epoch [588/1000], Loss: 0.1117 Epoch [589/1000], Loss: 0.1117 Epoch [590/1000], Loss: 0.1117 Epoch [591/1000], Loss: 0.1116 Epoch [592/1000], Loss: 0.1116 Epoch [593/1000], Loss: 0.1115 Epoch [594/1000], Loss: 0.1114 Epoch [595/1000], Loss: 0.1114 Epoch [596/1000], Loss: 0.1114 Epoch [597/1000], Loss: 0.1115 Epoch [598/1000], Loss: 0.1114 Epoch [599/1000], Loss: 0.1114 Epoch [600/1000], Loss: 0.1114 Epoch [601/1000], Loss: 0.1113 Epoch [602/1000], Loss: 0.1112 Epoch [603/1000], Loss: 0.1112 Epoch [604/1000], Loss: 0.1112 Epoch [605/1000], Loss: 0.1112 Epoch [606/1000], Loss: 0.1112 Epoch [607/1000], Loss: 0.1112 Epoch [608/1000], Loss: 0.1111 Epoch [609/1000], Loss: 0.1111 Epoch [610/1000], Loss: 0.1111 Epoch [611/1000], Loss: 0.1111 Epoch [612/1000], Loss: 0.1111 Epoch [613/1000], Loss: 0.1111 Epoch [614/1000], Loss: 0.1110 Epoch [615/1000], Loss: 0.1110 Epoch [616/1000], Loss: 0.1109 Epoch [617/1000], Loss: 0.1109 Epoch [618/1000], Loss: 0.1109 Epoch [619/1000], Loss: 0.1109 Epoch [620/1000], Loss: 0.1109 Epoch [621/1000], Loss: 0.1109 Epoch [622/1000], Loss: 0.1108 Epoch [623/1000], Loss: 0.1108 Epoch [624/1000], Loss: 0.1108 Epoch [625/1000], Loss: 0.1108 Epoch [626/1000], Loss: 0.1107 Epoch [627/1000], Loss: 0.1107 Epoch [628/1000], Loss: 0.1107 Epoch [629/1000], Loss: 0.1107 Epoch [630/1000], Loss: 0.1106 Epoch [631/1000], Loss: 0.1107 Epoch [632/1000], Loss: 0.1107 Epoch [633/1000], Loss: 0.1107 Epoch [634/1000], Loss: 0.1106 Epoch [635/1000], Loss: 0.1106 Epoch [636/1000], Loss: 0.1105 Epoch [637/1000], Loss: 0.1105 Epoch [638/1000], Loss: 0.1105 Epoch [639/1000], Loss: 0.1105 Epoch [640/1000], Loss: 0.1104 Epoch [641/1000], Loss: 0.1104 Epoch [642/1000], Loss: 0.1104 Epoch [643/1000], Loss: 0.1104 Epoch [644/1000], Loss: 0.1104 Epoch [645/1000], Loss: 0.1104 Epoch [646/1000], Loss: 0.1103 Epoch [647/1000], Loss: 0.1103 Epoch [648/1000], Loss: 0.1102 Epoch [649/1000], Loss: 0.1102 Epoch [650/1000], Loss: 0.1102 Epoch [651/1000], Loss: 0.1102 Epoch [652/1000], Loss: 0.1102 Epoch [653/1000], Loss: 0.1102 Epoch [654/1000], Loss: 0.1102 Epoch [655/1000], Loss: 0.1102 Epoch [656/1000], Loss: 0.1101 Epoch [657/1000], Loss: 0.1101 Epoch [658/1000], Loss: 0.1101 Epoch [659/1000], Loss: 0.1100 Epoch [660/1000], Loss: 0.1100 Epoch [661/1000], Loss: 0.1100 Epoch [662/1000], Loss: 0.1100 Epoch [663/1000], Loss: 0.1100 Epoch [664/1000], Loss: 0.1100 Epoch [665/1000], Loss: 0.1100 Epoch [666/1000], Loss: 0.1100 Epoch [667/1000], Loss: 0.1099 Epoch [668/1000], Loss: 0.1098 Epoch [669/1000], Loss: 0.1098 Epoch [670/1000], Loss: 0.1098 Epoch [671/1000], Loss: 0.1098 Epoch [672/1000], Loss: 0.1098 Epoch [673/1000], Loss: 0.1098 Epoch [674/1000], Loss: 0.1097 Epoch [675/1000], Loss: 0.1097 Epoch [676/1000], Loss: 0.1097 Epoch [677/1000], Loss: 0.1097 Epoch [678/1000], Loss: 0.1097 Epoch [679/1000], Loss: 0.1097 Epoch [680/1000], Loss: 0.1097 Epoch [681/1000], Loss: 0.1097 Epoch [682/1000], Loss: 0.1096 Epoch [683/1000], Loss: 0.1096 Epoch [684/1000], Loss: 0.1095 Epoch [685/1000], Loss: 0.1095 Epoch [686/1000], Loss: 0.1095 Epoch [687/1000], Loss: 0.1094 Epoch [688/1000], Loss: 0.1094 Epoch [689/1000], Loss: 0.1095 Epoch [690/1000], Loss: 0.1095 Epoch [691/1000], Loss: 0.1095 Epoch [692/1000], Loss: 0.1094 Epoch [693/1000], Loss: 0.1093 Epoch [694/1000], Loss: 0.1093 Epoch [695/1000], Loss: 0.1093 Epoch [696/1000], Loss: 0.1092 Epoch [697/1000], Loss: 0.1093 Epoch [698/1000], Loss: 0.1093 Epoch [699/1000], Loss: 0.1093 Epoch [700/1000], Loss: 0.1093 Epoch [701/1000], Loss: 0.1093 Epoch [702/1000], Loss: 0.1093 Epoch [703/1000], Loss: 0.1092 Epoch [704/1000], Loss: 0.1091 Epoch [705/1000], Loss: 0.1091 Epoch [706/1000], Loss: 0.1091 Epoch [707/1000], Loss: 0.1091 Epoch [708/1000], Loss: 0.1092 Epoch [709/1000], Loss: 0.1091 Epoch [710/1000], Loss: 0.1091 Epoch [711/1000], Loss: 0.1090 Epoch [712/1000], Loss: 0.1090 Epoch [713/1000], Loss: 0.1089 Epoch [714/1000], Loss: 0.1089 Epoch [715/1000], Loss: 0.1089 Epoch [716/1000], Loss: 0.1088 Epoch [717/1000], Loss: 0.1088 Epoch [718/1000], Loss: 0.1088 Epoch [719/1000], Loss: 0.1088 Epoch [720/1000], Loss: 0.1088 Epoch [721/1000], Loss: 0.1089 Epoch [722/1000], Loss: 0.1089 Epoch [723/1000], Loss: 0.1088 Epoch [724/1000], Loss: 0.1087 Epoch [725/1000], Loss: 0.1087 Epoch [726/1000], Loss: 0.1086 Epoch [727/1000], Loss: 0.1086 Epoch [728/1000], Loss: 0.1087 Epoch [729/1000], Loss: 0.1087 Epoch [730/1000], Loss: 0.1088 Epoch [731/1000], Loss: 0.1087 Epoch [732/1000], Loss: 0.1086 Epoch [733/1000], Loss: 0.1086 Epoch [734/1000], Loss: 0.1085 Epoch [735/1000], Loss: 0.1085 Epoch [736/1000], Loss: 0.1084 Epoch [737/1000], Loss: 0.1085 Epoch [738/1000], Loss: 0.1084 Epoch [739/1000], Loss: 0.1084 Epoch [740/1000], Loss: 0.1085 Epoch [741/1000], Loss: 0.1085 Epoch [742/1000], Loss: 0.1085 Epoch [743/1000], Loss: 0.1084 Epoch [744/1000], Loss: 0.1084 Epoch [745/1000], Loss: 0.1084 Epoch [746/1000], Loss: 0.1083 Epoch [747/1000], Loss: 0.1083 Epoch [748/1000], Loss: 0.1083 Epoch [749/1000], Loss: 0.1082 Epoch [750/1000], Loss: 0.1082 Epoch [751/1000], Loss: 0.1083 Epoch [752/1000], Loss: 0.1083 Epoch [753/1000], Loss: 0.1083 Epoch [754/1000], Loss: 0.1084 Epoch [755/1000], Loss: 0.1083 Epoch [756/1000], Loss: 0.1083 Epoch [757/1000], Loss: 0.1081 Epoch [758/1000], Loss: 0.1081 Epoch [759/1000], Loss: 0.1080 Epoch [760/1000], Loss: 0.1080 Epoch [761/1000], Loss: 0.1080 Epoch [762/1000], Loss: 0.1080 Epoch [763/1000], Loss: 0.1080 Epoch [764/1000], Loss: 0.1080 Epoch [765/1000], Loss: 0.1080 Epoch [766/1000], Loss: 0.1079 Epoch [767/1000], Loss: 0.1080 Epoch [768/1000], Loss: 0.1080 Epoch [769/1000], Loss: 0.1081 Epoch [770/1000], Loss: 0.1081 Epoch [771/1000], Loss: 0.1081 Epoch [772/1000], Loss: 0.1079 Epoch [773/1000], Loss: 0.1078 Epoch [774/1000], Loss: 0.1078 Epoch [775/1000], Loss: 0.1077 Epoch [776/1000], Loss: 0.1077 Epoch [777/1000], Loss: 0.1078 Epoch [778/1000], Loss: 0.1079 Epoch [779/1000], Loss: 0.1078 Epoch [780/1000], Loss: 0.1078 Epoch [781/1000], Loss: 0.1078 Epoch [782/1000], Loss: 0.1078 Epoch [783/1000], Loss: 0.1077 Epoch [784/1000], Loss: 0.1077 Epoch [785/1000], Loss: 0.1077 Epoch [786/1000], Loss: 0.1076 Epoch [787/1000], Loss: 0.1076 Epoch [788/1000], Loss: 0.1076 Epoch [789/1000], Loss: 0.1076 Epoch [790/1000], Loss: 0.1077 Epoch [791/1000], Loss: 0.1077 Epoch [792/1000], Loss: 0.1077 Epoch [793/1000], Loss: 0.1076 Epoch [794/1000], Loss: 0.1075 Epoch [795/1000], Loss: 0.1075 Epoch [796/1000], Loss: 0.1075 Epoch [797/1000], Loss: 0.1074 Epoch [798/1000], Loss: 0.1074 Epoch [799/1000], Loss: 0.1074 Epoch [800/1000], Loss: 0.1074 Epoch [801/1000], Loss: 0.1074 Epoch [802/1000], Loss: 0.1075 Epoch [803/1000], Loss: 0.1074 Epoch [804/1000], Loss: 0.1074 Epoch [805/1000], Loss: 0.1074 Epoch [806/1000], Loss: 0.1074 Epoch [807/1000], Loss: 0.1073 Epoch [808/1000], Loss: 0.1073 Epoch [809/1000], Loss: 0.1073 Epoch [810/1000], Loss: 0.1073 Epoch [811/1000], Loss: 0.1072 Epoch [812/1000], Loss: 0.1072 Epoch [813/1000], Loss: 0.1072 Epoch [814/1000], Loss: 0.1073 Epoch [815/1000], Loss: 0.1073 Epoch [816/1000], Loss: 0.1073 Epoch [817/1000], Loss: 0.1072 Epoch [818/1000], Loss: 0.1072 Epoch [819/1000], Loss: 0.1071 Epoch [820/1000], Loss: 0.1071 Epoch [821/1000], Loss: 0.1071 Epoch [822/1000], Loss: 0.1071 Epoch [823/1000], Loss: 0.1070 Epoch [824/1000], Loss: 0.1071 Epoch [825/1000], Loss: 0.1071 Epoch [826/1000], Loss: 0.1071 Epoch [827/1000], Loss: 0.1071 Epoch [828/1000], Loss: 0.1070 Epoch [829/1000], Loss: 0.1070 Epoch [830/1000], Loss: 0.1070 Epoch [831/1000], Loss: 0.1069 Epoch [832/1000], Loss: 0.1069 Epoch [833/1000], Loss: 0.1069 Epoch [834/1000], Loss: 0.1069 Epoch [835/1000], Loss: 0.1069 Epoch [836/1000], Loss: 0.1069 Epoch [837/1000], Loss: 0.1069 Epoch [838/1000], Loss: 0.1069 Epoch [839/1000], Loss: 0.1068 Epoch [840/1000], Loss: 0.1068 Epoch [841/1000], Loss: 0.1068 Epoch [842/1000], Loss: 0.1068 Epoch [843/1000], Loss: 0.1068 Epoch [844/1000], Loss: 0.1068 Epoch [845/1000], Loss: 0.1067 Epoch [846/1000], Loss: 0.1068 Epoch [847/1000], Loss: 0.1068 Epoch [848/1000], Loss: 0.1068 Epoch [849/1000], Loss: 0.1067 Epoch [850/1000], Loss: 0.1067 Epoch [851/1000], Loss: 0.1067 Epoch [852/1000], Loss: 0.1066 Epoch [853/1000], Loss: 0.1066 Epoch [854/1000], Loss: 0.1066 Epoch [855/1000], Loss: 0.1067 Epoch [856/1000], Loss: 0.1068 Epoch [857/1000], Loss: 0.1068 Epoch [858/1000], Loss: 0.1068 Epoch [859/1000], Loss: 0.1067 Epoch [860/1000], Loss: 0.1066 Epoch [861/1000], Loss: 0.1065 Epoch [862/1000], Loss: 0.1065 Epoch [863/1000], Loss: 0.1065 Epoch [864/1000], Loss: 0.1066 Epoch [865/1000], Loss: 0.1067 Epoch [866/1000], Loss: 0.1066 Epoch [867/1000], Loss: 0.1065 Epoch [868/1000], Loss: 0.1064 Epoch [869/1000], Loss: 0.1064 Epoch [870/1000], Loss: 0.1064 Epoch [871/1000], Loss: 0.1063 Epoch [872/1000], Loss: 0.1064 Epoch [873/1000], Loss: 0.1063 Epoch [874/1000], Loss: 0.1064 Epoch [875/1000], Loss: 0.1065 Epoch [876/1000], Loss: 0.1064 Epoch [877/1000], Loss: 0.1064 Epoch [878/1000], Loss: 0.1063 Epoch [879/1000], Loss: 0.1063 Epoch [880/1000], Loss: 0.1062 Epoch [881/1000], Loss: 0.1062 Epoch [882/1000], Loss: 0.1061 Epoch [883/1000], Loss: 0.1062 Epoch [884/1000], Loss: 0.1062 Epoch [885/1000], Loss: 0.1063 Epoch [886/1000], Loss: 0.1062 Epoch [887/1000], Loss: 0.1062 Epoch [888/1000], Loss: 0.1061 Epoch [889/1000], Loss: 0.1060 Epoch [890/1000], Loss: 0.1060 Epoch [891/1000], Loss: 0.1060 Epoch [892/1000], Loss: 0.1060 Epoch [893/1000], Loss: 0.1060 Epoch [894/1000], Loss: 0.1061 Epoch [895/1000], Loss: 0.1061 Epoch [896/1000], Loss: 0.1061 Epoch [897/1000], Loss: 0.1061 Epoch [898/1000], Loss: 0.1060 Epoch [899/1000], Loss: 0.1060 Epoch [900/1000], Loss: 0.1059 Epoch [901/1000], Loss: 0.1059 Epoch [902/1000], Loss: 0.1059 Epoch [903/1000], Loss: 0.1059 Epoch [904/1000], Loss: 0.1059 Epoch [905/1000], Loss: 0.1059 Epoch [906/1000], Loss: 0.1059 Epoch [907/1000], Loss: 0.1059 Epoch [908/1000], Loss: 0.1058 Epoch [909/1000], Loss: 0.1058 Epoch [910/1000], Loss: 0.1058 Epoch [911/1000], Loss: 0.1058 Epoch [912/1000], Loss: 0.1058 Epoch [913/1000], Loss: 0.1058 Epoch [914/1000], Loss: 0.1058 Epoch [915/1000], Loss: 0.1058 Epoch [916/1000], Loss: 0.1058 Epoch [917/1000], Loss: 0.1058 Epoch [918/1000], Loss: 0.1057 Epoch [919/1000], Loss: 0.1057 Epoch [920/1000], Loss: 0.1057 Epoch [921/1000], Loss: 0.1056 Epoch [922/1000], Loss: 0.1056 Epoch [923/1000], Loss: 0.1057 Epoch [924/1000], Loss: 0.1057 Epoch [925/1000], Loss: 0.1057 Epoch [926/1000], Loss: 0.1056 Epoch [927/1000], Loss: 0.1056 Epoch [928/1000], Loss: 0.1056 Epoch [929/1000], Loss: 0.1056 Epoch [930/1000], Loss: 0.1056 Epoch [931/1000], Loss: 0.1057 Epoch [932/1000], Loss: 0.1057 Epoch [933/1000], Loss: 0.1057 Epoch [934/1000], Loss: 0.1056 Epoch [935/1000], Loss: 0.1055 Epoch [936/1000], Loss: 0.1055 Epoch [937/1000], Loss: 0.1054 Epoch [938/1000], Loss: 0.1054 Epoch [939/1000], Loss: 0.1055 Epoch [940/1000], Loss: 0.1055 Epoch [941/1000], Loss: 0.1056 Epoch [942/1000], Loss: 0.1055 Epoch [943/1000], Loss: 0.1055 Epoch [944/1000], Loss: 0.1054 Epoch [945/1000], Loss: 0.1054 Epoch [946/1000], Loss: 0.1054 Epoch [947/1000], Loss: 0.1054 Epoch [948/1000], Loss: 0.1054 Epoch [949/1000], Loss: 0.1054 Epoch [950/1000], Loss: 0.1053 Epoch [951/1000], Loss: 0.1053 Epoch [952/1000], Loss: 0.1053 Epoch [953/1000], Loss: 0.1053 Epoch [954/1000], Loss: 0.1053 Epoch [955/1000], Loss: 0.1053 Epoch [956/1000], Loss: 0.1052 Epoch [957/1000], Loss: 0.1053 Epoch [958/1000], Loss: 0.1052 Epoch [959/1000], Loss: 0.1052 Epoch [960/1000], Loss: 0.1052 Epoch [961/1000], Loss: 0.1052 Epoch [962/1000], Loss: 0.1052 Epoch [963/1000], Loss: 0.1053 Epoch [964/1000], Loss: 0.1053 Epoch [965/1000], Loss: 0.1053 Epoch [966/1000], Loss: 0.1052 Epoch [967/1000], Loss: 0.1052 Epoch [968/1000], Loss: 0.1051 Epoch [969/1000], Loss: 0.1051 Epoch [970/1000], Loss: 0.1051 Epoch [971/1000], Loss: 0.1051 Epoch [972/1000], Loss: 0.1051 Epoch [973/1000], Loss: 0.1051 Epoch [974/1000], Loss: 0.1051 Epoch [975/1000], Loss: 0.1052 Epoch [976/1000], Loss: 0.1051 Epoch [977/1000], Loss: 0.1051 Epoch [978/1000], Loss: 0.1050 Epoch [979/1000], Loss: 0.1050 Epoch [980/1000], Loss: 0.1050 Epoch [981/1000], Loss: 0.1050 Epoch [982/1000], Loss: 0.1050 Epoch [983/1000], Loss: 0.1050 Epoch [984/1000], Loss: 0.1050 Epoch [985/1000], Loss: 0.1050 Epoch [986/1000], Loss: 0.1050 Epoch [987/1000], Loss: 0.1050 Epoch [988/1000], Loss: 0.1049 Epoch [989/1000], Loss: 0.1049 Epoch [990/1000], Loss: 0.1048 Epoch [991/1000], Loss: 0.1049 Epoch [992/1000], Loss: 0.1048 Epoch [993/1000], Loss: 0.1048 Epoch [994/1000], Loss: 0.1048 Epoch [995/1000], Loss: 0.1049 Epoch [996/1000], Loss: 0.1048 Epoch [997/1000], Loss: 0.1048 Epoch [998/1000], Loss: 0.1048 Epoch [999/1000], Loss: 0.1048 Epoch [1000/1000], Loss: 0.1048
plt.imsave("experiment_" + str(experiment_number) + ".png", out.permute(1, 2, 0).detach().cpu().numpy())
from moviepy.editor import *
import cv2
fourcc = cv2.VideoWriter_fourcc(*"H264")
video = cv2.VideoWriter("experiment_video_" + str(experiment_number) + ".mp4", fourcc, 24, (isize, isize))
gen = {}
for n in range(0, num_epochs):
image = cv2.imread(f".scratch/out_" + str(n) + ".png")
video.write(image)
video.release()
torch.save(model.state_dict(), 'model.ckpt')
isize = 256
num = 1024
white = torch.tensor([1.0]).expand(num, 3, isize, isize)
model = EllipseModel(n=num, use_cuda=False)
model.load_state_dict(torch.load('model.ckpt'))
model = model.cpu()
filters_soft, filters2, radius, colors = model(isize, 0.001)
# mrgb = torch.sum(white*filters2*(filters_soft > 0.0), (2, 3),
# keepdim=True)/(torch.sum(filters2*(filters_soft > 0.0), (2, 3), keepdim=True)+0.00001)
rgb = colors.reshape((num, 3, 1, 1))*filters2.expand(num, 3, isize, isize)
out = torch.sum(filters2*rgb, 0)
out = out.clamp(0.0, 1.0)
plt.imsave("experiment.png", out.permute(1, 2, 0).detach().cpu().numpy())
from IPython.display import Video
Video("video.mp4")
import os
os.environ["PYTORCH_CUDA_ALLOC_CONF"] = 'max_split_size_mb:32'
class Model