# 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.randn((self.num), requires_grad=True))
self.posy = torch.nn.Parameter(
torch.randn((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.zeros((self.fr, self.num), requires_grad=True))
self.fweights_cos = torch.nn.Parameter(
torch.zeros((self.fr, self.num), requires_grad=True))
self.scale_x = torch.nn.Parameter(
torch.randn((self.num), requires_grad=True))
self.ecc2 = torch.nn.Parameter(
torch.randn((self.num), requires_grad=True))
self.colors = torch.nn.Parameter(
torch.zeros((self.num, 3), requires_grad=True))
self.rotate = torch.nn.Parameter(
torch.zeros((self.num), requires_grad=True))
self.order = torch.nn.Parameter(
torch.ones((self.num), requires_grad=True))
def forward(self, isize, t):
posx = 3.0 * (self.posx.sigmoid()) - 1.0
posy = 3.0 * (self.posy.sigmoid()) - 1.0
radius = (self.radius.sigmoid())
colors = (self.colors).tanh()
# background = (self.background).sigmoid() + 0.5
rotate = 3.141592 * self.rotate
scale_x = (self.scale_x).sigmoid() * 4.0
ecc2 = (self.ecc2).sigmoid() * 4.0
order = self.order
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 = ecc2.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 = (self.fweights_sin.reshape(fr, self.num, 1, 1, 1) * fourier.sin() +
self.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 = 1000.0*(1-torch.mean(1.0*(filters_soft > 0), (2, 3),
# keepdim=True)) * order.reshape(self.num, 1, 1, 1)
# filter_sort = (1-t)*torch.exp(np.log(t)*(torch.argsort(
# torch.argsort(weights*1.0*(filters_soft > 0), 0, descending=True), 0)))
# filters2 = filter_sort * filters_soft * (filters_soft > 0.0)
# filters2 = filters2 / (0.0001+torch.sum(filters2, 0, keepdim=True))
filters2 = filters_soft * (filters_soft > 0.0)
return (filters_soft, filters2, radius, colors)
isize = 256
img = Image.open("example_input_1.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 = 256
# 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.01)
out = None
num_epochs = 1000
try:
shutil.rmtree('.scratch')
except:
pass
os.mkdir('.scratch')
for epoch in range(0, num_epochs):
torch.cuda.empty_cache()
filters_soft, filters2, radius, colors = model(isize, 0.001)
mrgb = torch.sum(img.expand(num, 3, isize, isize)*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)
# pic_loss = (img-out).abs().mean()
# pic_loss = ((img_var*((img-out).square()))/img_var.mean()).mean()
pic_loss = ((((img-out).square()))).mean().sqrt()
# pic_loss = ((img_var*((img-out).square()))/img_var.mean()).mean()
loss = pic_loss
# grayscale, colors = model()
# rgb = colors.reshape((model.num, 3, 1, 1))
# out = torch.sum(rgb * grayscale, 0) / model.num
# pic_loss = ((img - out).square()).mean().sqrt()
# # pic_loss = ((img - out).abs()).mean()
# 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}')
# plt.imsave("out.png", out.permute(1, 2, 0).detach().cpu().numpy())
torch.save(model.state_dict(), 'model.ckpt')
Epoch [1/1000], Loss: 0.5117 Epoch [2/1000], Loss: 0.3528 Epoch [3/1000], Loss: 0.2642 Epoch [4/1000], Loss: 0.2887 Epoch [5/1000], Loss: 0.3123 Epoch [6/1000], Loss: 0.2952 Epoch [7/1000], Loss: 0.2576 Epoch [8/1000], Loss: 0.2282 Epoch [9/1000], Loss: 0.2242 Epoch [10/1000], Loss: 0.2349 Epoch [11/1000], Loss: 0.2422 Epoch [12/1000], Loss: 0.2393 Epoch [13/1000], Loss: 0.2284 Epoch [14/1000], Loss: 0.2164 Epoch [15/1000], Loss: 0.2098 Epoch [16/1000], Loss: 0.2097 Epoch [17/1000], Loss: 0.2115 Epoch [18/1000], Loss: 0.2104 Epoch [19/1000], Loss: 0.2057 Epoch [20/1000], Loss: 0.2000 Epoch [21/1000], Loss: 0.1962 Epoch [22/1000], Loss: 0.1948 Epoch [23/1000], Loss: 0.1941 Epoch [24/1000], Loss: 0.1926 Epoch [25/1000], Loss: 0.1903 Epoch [26/1000], Loss: 0.1879 Epoch [27/1000], Loss: 0.1859 Epoch [28/1000], Loss: 0.1841 Epoch [29/1000], Loss: 0.1822 Epoch [30/1000], Loss: 0.1802 Epoch [31/1000], Loss: 0.1786 Epoch [32/1000], Loss: 0.1773 Epoch [33/1000], Loss: 0.1759 Epoch [34/1000], Loss: 0.1741 Epoch [35/1000], Loss: 0.1722 Epoch [36/1000], Loss: 0.1707 Epoch [37/1000], Loss: 0.1697 Epoch [38/1000], Loss: 0.1685 Epoch [39/1000], Loss: 0.1670 Epoch [40/1000], Loss: 0.1653 Epoch [41/1000], Loss: 0.1640 Epoch [42/1000], Loss: 0.1632 Epoch [43/1000], Loss: 0.1623 Epoch [44/1000], Loss: 0.1610 Epoch [45/1000], Loss: 0.1593 Epoch [46/1000], Loss: 0.1583 Epoch [47/1000], Loss: 0.1576 Epoch [48/1000], Loss: 0.1568 Epoch [49/1000], Loss: 0.1559 Epoch [50/1000], Loss: 0.1546 Epoch [51/1000], Loss: 0.1540 Epoch [52/1000], Loss: 0.1532 Epoch [53/1000], Loss: 0.1525 Epoch [54/1000], Loss: 0.1514 Epoch [55/1000], Loss: 0.1507 Epoch [56/1000], Loss: 0.1501 Epoch [57/1000], Loss: 0.1494 Epoch [58/1000], Loss: 0.1486 Epoch [59/1000], Loss: 0.1479 Epoch [60/1000], Loss: 0.1474 Epoch [61/1000], Loss: 0.1467 Epoch [62/1000], Loss: 0.1461 Epoch [63/1000], Loss: 0.1454 Epoch [64/1000], Loss: 0.1449 Epoch [65/1000], Loss: 0.1443 Epoch [66/1000], Loss: 0.1437 Epoch [67/1000], Loss: 0.1432 Epoch [68/1000], Loss: 0.1426 Epoch [69/1000], Loss: 0.1421 Epoch [70/1000], Loss: 0.1416 Epoch [71/1000], Loss: 0.1411 Epoch [72/1000], Loss: 0.1405 Epoch [73/1000], Loss: 0.1400 Epoch [74/1000], Loss: 0.1395 Epoch [75/1000], Loss: 0.1390 Epoch [76/1000], Loss: 0.1384 Epoch [77/1000], Loss: 0.1380 Epoch [78/1000], Loss: 0.1375 Epoch [79/1000], Loss: 0.1370 Epoch [80/1000], Loss: 0.1367 Epoch [81/1000], Loss: 0.1361 Epoch [82/1000], Loss: 0.1356 Epoch [83/1000], Loss: 0.1353 Epoch [84/1000], Loss: 0.1348 Epoch [85/1000], Loss: 0.1345 Epoch [86/1000], Loss: 0.1340 Epoch [87/1000], Loss: 0.1335 Epoch [88/1000], Loss: 0.1332 Epoch [89/1000], Loss: 0.1326 Epoch [90/1000], Loss: 0.1324 Epoch [91/1000], Loss: 0.1318 Epoch [92/1000], Loss: 0.1315 Epoch [93/1000], Loss: 0.1311 Epoch [94/1000], Loss: 0.1306 Epoch [95/1000], Loss: 0.1303 Epoch [96/1000], Loss: 0.1298 Epoch [97/1000], Loss: 0.1295 Epoch [98/1000], Loss: 0.1292 Epoch [99/1000], Loss: 0.1289 Epoch [100/1000], Loss: 0.1285 Epoch [101/1000], Loss: 0.1282 Epoch [102/1000], Loss: 0.1278 Epoch [103/1000], Loss: 0.1275 Epoch [104/1000], Loss: 0.1273 Epoch [105/1000], Loss: 0.1270 Epoch [106/1000], Loss: 0.1267 Epoch [107/1000], Loss: 0.1263 Epoch [108/1000], Loss: 0.1261 Epoch [109/1000], Loss: 0.1259 Epoch [110/1000], Loss: 0.1256 Epoch [111/1000], Loss: 0.1253 Epoch [112/1000], Loss: 0.1251 Epoch [113/1000], Loss: 0.1249 Epoch [114/1000], Loss: 0.1247 Epoch [115/1000], Loss: 0.1244 Epoch [116/1000], Loss: 0.1243 Epoch [117/1000], Loss: 0.1240 Epoch [118/1000], Loss: 0.1238 Epoch [119/1000], Loss: 0.1235 Epoch [120/1000], Loss: 0.1234 Epoch [121/1000], Loss: 0.1232 Epoch [122/1000], Loss: 0.1230 Epoch [123/1000], Loss: 0.1228 Epoch [124/1000], Loss: 0.1225 Epoch [125/1000], Loss: 0.1224 Epoch [126/1000], Loss: 0.1223 Epoch [127/1000], Loss: 0.1220 Epoch [128/1000], Loss: 0.1218 Epoch [129/1000], Loss: 0.1216 Epoch [130/1000], Loss: 0.1215 Epoch [131/1000], Loss: 0.1213 Epoch [132/1000], Loss: 0.1211 Epoch [133/1000], Loss: 0.1209 Epoch [134/1000], Loss: 0.1207 Epoch [135/1000], Loss: 0.1206 Epoch [136/1000], Loss: 0.1204 Epoch [137/1000], Loss: 0.1202 Epoch [138/1000], Loss: 0.1201 Epoch [139/1000], Loss: 0.1200 Epoch [140/1000], Loss: 0.1199 Epoch [141/1000], Loss: 0.1198 Epoch [142/1000], Loss: 0.1198 Epoch [143/1000], Loss: 0.1198 Epoch [144/1000], Loss: 0.1196 Epoch [145/1000], Loss: 0.1193 Epoch [146/1000], Loss: 0.1191 Epoch [147/1000], Loss: 0.1190 Epoch [148/1000], Loss: 0.1188 Epoch [149/1000], Loss: 0.1187 Epoch [150/1000], Loss: 0.1185 Epoch [151/1000], Loss: 0.1183 Epoch [152/1000], Loss: 0.1183 Epoch [153/1000], Loss: 0.1181 Epoch [154/1000], Loss: 0.1178 Epoch [155/1000], Loss: 0.1179 Epoch [156/1000], Loss: 0.1175 Epoch [157/1000], Loss: 0.1174 Epoch [158/1000], Loss: 0.1174 Epoch [159/1000], Loss: 0.1172 Epoch [160/1000], Loss: 0.1171 Epoch [161/1000], Loss: 0.1169 Epoch [162/1000], Loss: 0.1168 Epoch [163/1000], Loss: 0.1166 Epoch [164/1000], Loss: 0.1165 Epoch [165/1000], Loss: 0.1163 Epoch [166/1000], Loss: 0.1163 Epoch [167/1000], Loss: 0.1161 Epoch [168/1000], Loss: 0.1160 Epoch [169/1000], Loss: 0.1158 Epoch [170/1000], Loss: 0.1157 Epoch [171/1000], Loss: 0.1156 Epoch [172/1000], Loss: 0.1154 Epoch [173/1000], Loss: 0.1153 Epoch [174/1000], Loss: 0.1152 Epoch [175/1000], Loss: 0.1151 Epoch [176/1000], Loss: 0.1149 Epoch [177/1000], Loss: 0.1148 Epoch [178/1000], Loss: 0.1147 Epoch [179/1000], Loss: 0.1145 Epoch [180/1000], Loss: 0.1144 Epoch [181/1000], Loss: 0.1143 Epoch [182/1000], Loss: 0.1143 Epoch [183/1000], Loss: 0.1141 Epoch [184/1000], Loss: 0.1141 Epoch [185/1000], Loss: 0.1142 Epoch [186/1000], Loss: 0.1143 Epoch [187/1000], Loss: 0.1144 Epoch [188/1000], Loss: 0.1144 Epoch [189/1000], Loss: 0.1141 Epoch [190/1000], Loss: 0.1135 Epoch [191/1000], Loss: 0.1134 Epoch [192/1000], Loss: 0.1135 Epoch [193/1000], Loss: 0.1136 Epoch [194/1000], Loss: 0.1134 Epoch [195/1000], Loss: 0.1132 Epoch [196/1000], Loss: 0.1130 Epoch [197/1000], Loss: 0.1130 Epoch [198/1000], Loss: 0.1130 Epoch [199/1000], Loss: 0.1129 Epoch [200/1000], Loss: 0.1126 Epoch [201/1000], Loss: 0.1124 Epoch [202/1000], Loss: 0.1125 Epoch [203/1000], Loss: 0.1125 Epoch [204/1000], Loss: 0.1123 Epoch [205/1000], Loss: 0.1122 Epoch [206/1000], Loss: 0.1120 Epoch [207/1000], Loss: 0.1119 Epoch [208/1000], Loss: 0.1119 Epoch [209/1000], Loss: 0.1117 Epoch [210/1000], Loss: 0.1116 Epoch [211/1000], Loss: 0.1116 Epoch [212/1000], Loss: 0.1115 Epoch [213/1000], Loss: 0.1115 Epoch [214/1000], Loss: 0.1113 Epoch [215/1000], Loss: 0.1112 Epoch [216/1000], Loss: 0.1112 Epoch [217/1000], Loss: 0.1111 Epoch [218/1000], Loss: 0.1110 Epoch [219/1000], Loss: 0.1110 Epoch [220/1000], Loss: 0.1110 Epoch [221/1000], Loss: 0.1109 Epoch [222/1000], Loss: 0.1110 Epoch [223/1000], Loss: 0.1111 Epoch [224/1000], Loss: 0.1110 Epoch [225/1000], Loss: 0.1108 Epoch [226/1000], Loss: 0.1105 Epoch [227/1000], Loss: 0.1102 Epoch [228/1000], Loss: 0.1101 Epoch [229/1000], Loss: 0.1101 Epoch [230/1000], Loss: 0.1102 Epoch [231/1000], Loss: 0.1101 Epoch [232/1000], Loss: 0.1101 Epoch [233/1000], Loss: 0.1100 Epoch [234/1000], Loss: 0.1099 Epoch [235/1000], Loss: 0.1098 Epoch [236/1000], Loss: 0.1097 Epoch [237/1000], Loss: 0.1096 Epoch [238/1000], Loss: 0.1095 Epoch [239/1000], Loss: 0.1094 Epoch [240/1000], Loss: 0.1094 Epoch [241/1000], Loss: 0.1094 Epoch [242/1000], Loss: 0.1095 Epoch [243/1000], Loss: 0.1096 Epoch [244/1000], Loss: 0.1096 Epoch [245/1000], Loss: 0.1097 Epoch [246/1000], Loss: 0.1095 Epoch [247/1000], Loss: 0.1092 Epoch [248/1000], Loss: 0.1090 Epoch [249/1000], Loss: 0.1089 Epoch [250/1000], Loss: 0.1089 Epoch [251/1000], Loss: 0.1089 Epoch [252/1000], Loss: 0.1090 Epoch [253/1000], Loss: 0.1088 Epoch [254/1000], Loss: 0.1089 Epoch [255/1000], Loss: 0.1087 Epoch [256/1000], Loss: 0.1087 Epoch [257/1000], Loss: 0.1087 Epoch [258/1000], Loss: 0.1085 Epoch [259/1000], Loss: 0.1084 Epoch [260/1000], Loss: 0.1083 Epoch [261/1000], Loss: 0.1083 Epoch [262/1000], Loss: 0.1083 Epoch [263/1000], Loss: 0.1083 Epoch [264/1000], Loss: 0.1082 Epoch [265/1000], Loss: 0.1081 Epoch [266/1000], Loss: 0.1081 Epoch [267/1000], Loss: 0.1081 Epoch [268/1000], Loss: 0.1080 Epoch [269/1000], Loss: 0.1081 Epoch [270/1000], Loss: 0.1081 Epoch [271/1000], Loss: 0.1082 Epoch [272/1000], Loss: 0.1082 Epoch [273/1000], Loss: 0.1080 Epoch [274/1000], Loss: 0.1079 Epoch [275/1000], Loss: 0.1078 Epoch [276/1000], Loss: 0.1076 Epoch [277/1000], Loss: 0.1075 Epoch [278/1000], Loss: 0.1075 Epoch [279/1000], Loss: 0.1075 Epoch [280/1000], Loss: 0.1075 Epoch [281/1000], Loss: 0.1074 Epoch [282/1000], Loss: 0.1074 Epoch [283/1000], Loss: 0.1073 Epoch [284/1000], Loss: 0.1074 Epoch [285/1000], Loss: 0.1073 Epoch [286/1000], Loss: 0.1073 Epoch [287/1000], Loss: 0.1073 Epoch [288/1000], Loss: 0.1073 Epoch [289/1000], Loss: 0.1074 Epoch [290/1000], Loss: 0.1073 Epoch [291/1000], Loss: 0.1071 Epoch [292/1000], Loss: 0.1069 Epoch [293/1000], Loss: 0.1069 Epoch [294/1000], Loss: 0.1069 Epoch [295/1000], Loss: 0.1070 Epoch [296/1000], Loss: 0.1073 Epoch [297/1000], Loss: 0.1078 Epoch [298/1000], Loss: 0.1081 Epoch [299/1000], Loss: 0.1077 Epoch [300/1000], Loss: 0.1069 Epoch [301/1000], Loss: 0.1066 Epoch [302/1000], Loss: 0.1070 Epoch [303/1000], Loss: 0.1072 Epoch [304/1000], Loss: 0.1069 Epoch [305/1000], Loss: 0.1065 Epoch [306/1000], Loss: 0.1065 Epoch [307/1000], Loss: 0.1065 Epoch [308/1000], Loss: 0.1065 Epoch [309/1000], Loss: 0.1065 Epoch [310/1000], Loss: 0.1062 Epoch [311/1000], Loss: 0.1061 Epoch [312/1000], Loss: 0.1061 Epoch [313/1000], Loss: 0.1062 Epoch [314/1000], Loss: 0.1061 Epoch [315/1000], Loss: 0.1060 Epoch [316/1000], Loss: 0.1059 Epoch [317/1000], Loss: 0.1059 Epoch [318/1000], Loss: 0.1059 Epoch [319/1000], Loss: 0.1059 Epoch [320/1000], Loss: 0.1059 Epoch [321/1000], Loss: 0.1059 Epoch [322/1000], Loss: 0.1059 Epoch [323/1000], Loss: 0.1057 Epoch [324/1000], Loss: 0.1057 Epoch [325/1000], Loss: 0.1057 Epoch [326/1000], Loss: 0.1058 Epoch [327/1000], Loss: 0.1058 Epoch [328/1000], Loss: 0.1058 Epoch [329/1000], Loss: 0.1060 Epoch [330/1000], Loss: 0.1063 Epoch [331/1000], Loss: 0.1065 Epoch [332/1000], Loss: 0.1066 Epoch [333/1000], Loss: 0.1065 Epoch [334/1000], Loss: 0.1063 Epoch [335/1000], Loss: 0.1060 Epoch [336/1000], Loss: 0.1059 Epoch [337/1000], Loss: 0.1058 Epoch [338/1000], Loss: 0.1058 Epoch [339/1000], Loss: 0.1057 Epoch [340/1000], Loss: 0.1056 Epoch [341/1000], Loss: 0.1055 Epoch [342/1000], Loss: 0.1055 Epoch [343/1000], Loss: 0.1055 Epoch [344/1000], Loss: 0.1056 Epoch [345/1000], Loss: 0.1055 Epoch [346/1000], Loss: 0.1052 Epoch [347/1000], Loss: 0.1051 Epoch [348/1000], Loss: 0.1052 Epoch [349/1000], Loss: 0.1053 Epoch [350/1000], Loss: 0.1053 Epoch [351/1000], Loss: 0.1053 Epoch [352/1000], Loss: 0.1051 Epoch [353/1000], Loss: 0.1050 Epoch [354/1000], Loss: 0.1050 Epoch [355/1000], Loss: 0.1049 Epoch [356/1000], Loss: 0.1049 Epoch [357/1000], Loss: 0.1049 Epoch [358/1000], Loss: 0.1049 Epoch [359/1000], Loss: 0.1049 Epoch [360/1000], Loss: 0.1049 Epoch [361/1000], Loss: 0.1048 Epoch [362/1000], Loss: 0.1048 Epoch [363/1000], Loss: 0.1047 Epoch [364/1000], Loss: 0.1047 Epoch [365/1000], Loss: 0.1047 Epoch [366/1000], Loss: 0.1048 Epoch [367/1000], Loss: 0.1048 Epoch [368/1000], Loss: 0.1048 Epoch [369/1000], Loss: 0.1050 Epoch [370/1000], Loss: 0.1052 Epoch [371/1000], Loss: 0.1055 Epoch [372/1000], Loss: 0.1056 Epoch [373/1000], Loss: 0.1054 Epoch [374/1000], Loss: 0.1051 Epoch [375/1000], Loss: 0.1048 Epoch [376/1000], Loss: 0.1049 Epoch [377/1000], Loss: 0.1050 Epoch [378/1000], Loss: 0.1050 Epoch [379/1000], Loss: 0.1050 Epoch [380/1000], Loss: 0.1048 Epoch [381/1000], Loss: 0.1046 Epoch [382/1000], Loss: 0.1044 Epoch [383/1000], Loss: 0.1044 Epoch [384/1000], Loss: 0.1044 Epoch [385/1000], Loss: 0.1045 Epoch [386/1000], Loss: 0.1047 Epoch [387/1000], Loss: 0.1046 Epoch [388/1000], Loss: 0.1044 Epoch [389/1000], Loss: 0.1042 Epoch [390/1000], Loss: 0.1042 Epoch [391/1000], Loss: 0.1041 Epoch [392/1000], Loss: 0.1041 Epoch [393/1000], Loss: 0.1042 Epoch [394/1000], Loss: 0.1042 Epoch [395/1000], Loss: 0.1042 Epoch [396/1000], Loss: 0.1042 Epoch [397/1000], Loss: 0.1041 Epoch [398/1000], Loss: 0.1040 Epoch [399/1000], Loss: 0.1040 Epoch [400/1000], Loss: 0.1040 Epoch [401/1000], Loss: 0.1040 Epoch [402/1000], Loss: 0.1040 Epoch [403/1000], Loss: 0.1041 Epoch [404/1000], Loss: 0.1042 Epoch [405/1000], Loss: 0.1045 Epoch [406/1000], Loss: 0.1048 Epoch [407/1000], Loss: 0.1052 Epoch [408/1000], Loss: 0.1055 Epoch [409/1000], Loss: 0.1054 Epoch [410/1000], Loss: 0.1050 Epoch [411/1000], Loss: 0.1044 Epoch [412/1000], Loss: 0.1039 Epoch [413/1000], Loss: 0.1038 Epoch [414/1000], Loss: 0.1040 Epoch [415/1000], Loss: 0.1042 Epoch [416/1000], Loss: 0.1044 Epoch [417/1000], Loss: 0.1045 Epoch [418/1000], Loss: 0.1043 Epoch [419/1000], Loss: 0.1041 Epoch [420/1000], Loss: 0.1038 Epoch [421/1000], Loss: 0.1038 Epoch [422/1000], Loss: 0.1038 Epoch [423/1000], Loss: 0.1039 Epoch [424/1000], Loss: 0.1039 Epoch [425/1000], Loss: 0.1038 Epoch [426/1000], Loss: 0.1037 Epoch [427/1000], Loss: 0.1036 Epoch [428/1000], Loss: 0.1036 Epoch [429/1000], Loss: 0.1036 Epoch [430/1000], Loss: 0.1036 Epoch [431/1000], Loss: 0.1036 Epoch [432/1000], Loss: 0.1036 Epoch [433/1000], Loss: 0.1036 Epoch [434/1000], Loss: 0.1037 Epoch [435/1000], Loss: 0.1036 Epoch [436/1000], Loss: 0.1036 Epoch [437/1000], Loss: 0.1034 Epoch [438/1000], Loss: 0.1033 Epoch [439/1000], Loss: 0.1033 Epoch [440/1000], Loss: 0.1033 Epoch [441/1000], Loss: 0.1033 Epoch [442/1000], Loss: 0.1033 Epoch [443/1000], Loss: 0.1033 Epoch [444/1000], Loss: 0.1034 Epoch [445/1000], Loss: 0.1034 Epoch [446/1000], Loss: 0.1034 Epoch [447/1000], Loss: 0.1035 Epoch [448/1000], Loss: 0.1036 Epoch [449/1000], Loss: 0.1038 Epoch [450/1000], Loss: 0.1039 Epoch [451/1000], Loss: 0.1041 Epoch [452/1000], Loss: 0.1042 Epoch [453/1000], Loss: 0.1042 Epoch [454/1000], Loss: 0.1040 Epoch [455/1000], Loss: 0.1037 Epoch [456/1000], Loss: 0.1034 Epoch [457/1000], Loss: 0.1032 Epoch [458/1000], Loss: 0.1030 Epoch [459/1000], Loss: 0.1030 Epoch [460/1000], Loss: 0.1032 Epoch [461/1000], Loss: 0.1033 Epoch [462/1000], Loss: 0.1035 Epoch [463/1000], Loss: 0.1035 Epoch [464/1000], Loss: 0.1036 Epoch [465/1000], Loss: 0.1035 Epoch [466/1000], Loss: 0.1033 Epoch [467/1000], Loss: 0.1032 Epoch [468/1000], Loss: 0.1032 Epoch [469/1000], Loss: 0.1033 Epoch [470/1000], Loss: 0.1034 Epoch [471/1000], Loss: 0.1036 Epoch [472/1000], Loss: 0.1040 Epoch [473/1000], Loss: 0.1043 Epoch [474/1000], Loss: 0.1045 Epoch [475/1000], Loss: 0.1042 Epoch [476/1000], Loss: 0.1035 Epoch [477/1000], Loss: 0.1031 Epoch [478/1000], Loss: 0.1030 Epoch [479/1000], Loss: 0.1033 Epoch [480/1000], Loss: 0.1035 Epoch [481/1000], Loss: 0.1036 Epoch [482/1000], Loss: 0.1033 Epoch [483/1000], Loss: 0.1029 Epoch [484/1000], Loss: 0.1028 Epoch [485/1000], Loss: 0.1029 Epoch [486/1000], Loss: 0.1031 Epoch [487/1000], Loss: 0.1031 Epoch [488/1000], Loss: 0.1031 Epoch [489/1000], Loss: 0.1029 Epoch [490/1000], Loss: 0.1029 Epoch [491/1000], Loss: 0.1029 Epoch [492/1000], Loss: 0.1029 Epoch [493/1000], Loss: 0.1029 Epoch [494/1000], Loss: 0.1029 Epoch [495/1000], Loss: 0.1029 Epoch [496/1000], Loss: 0.1029 Epoch [497/1000], Loss: 0.1028 Epoch [498/1000], Loss: 0.1029 Epoch [499/1000], Loss: 0.1029 Epoch [500/1000], Loss: 0.1030 Epoch [501/1000], Loss: 0.1032 Epoch [502/1000], Loss: 0.1033 Epoch [503/1000], Loss: 0.1035 Epoch [504/1000], Loss: 0.1036 Epoch [505/1000], Loss: 0.1036 Epoch [506/1000], Loss: 0.1036 Epoch [507/1000], Loss: 0.1035 Epoch [508/1000], Loss: 0.1032 Epoch [509/1000], Loss: 0.1030 Epoch [510/1000], Loss: 0.1027 Epoch [511/1000], Loss: 0.1026 Epoch [512/1000], Loss: 0.1025 Epoch [513/1000], Loss: 0.1025 Epoch [514/1000], Loss: 0.1026 Epoch [515/1000], Loss: 0.1027 Epoch [516/1000], Loss: 0.1028 Epoch [517/1000], Loss: 0.1029 Epoch [518/1000], Loss: 0.1029 Epoch [519/1000], Loss: 0.1029 Epoch [520/1000], Loss: 0.1028 Epoch [521/1000], Loss: 0.1028 Epoch [522/1000], Loss: 0.1027 Epoch [523/1000], Loss: 0.1026 Epoch [524/1000], Loss: 0.1026 Epoch [525/1000], Loss: 0.1025 Epoch [526/1000], Loss: 0.1025 Epoch [527/1000], Loss: 0.1025 Epoch [528/1000], Loss: 0.1025 Epoch [529/1000], Loss: 0.1025 Epoch [530/1000], Loss: 0.1025 Epoch [531/1000], Loss: 0.1025 Epoch [532/1000], Loss: 0.1025 Epoch [533/1000], Loss: 0.1025 Epoch [534/1000], Loss: 0.1025 Epoch [535/1000], Loss: 0.1025 Epoch [536/1000], Loss: 0.1025 Epoch [537/1000], Loss: 0.1026 Epoch [538/1000], Loss: 0.1027 Epoch [539/1000], Loss: 0.1028 Epoch [540/1000], Loss: 0.1029 Epoch [541/1000], Loss: 0.1030 Epoch [542/1000], Loss: 0.1030 Epoch [543/1000], Loss: 0.1028 Epoch [544/1000], Loss: 0.1025 Epoch [545/1000], Loss: 0.1023 Epoch [546/1000], Loss: 0.1022 Epoch [547/1000], Loss: 0.1023 Epoch [548/1000], Loss: 0.1025 Epoch [549/1000], Loss: 0.1027 Epoch [550/1000], Loss: 0.1030 Epoch [551/1000], Loss: 0.1033 Epoch [552/1000], Loss: 0.1036 Epoch [553/1000], Loss: 0.1040 Epoch [554/1000], Loss: 0.1043 Epoch [555/1000], Loss: 0.1041 Epoch [556/1000], Loss: 0.1036 Epoch [557/1000], Loss: 0.1031 Epoch [558/1000], Loss: 0.1028 Epoch [559/1000], Loss: 0.1027 Epoch [560/1000], Loss: 0.1027 Epoch [561/1000], Loss: 0.1027 Epoch [562/1000], Loss: 0.1027 Epoch [563/1000], Loss: 0.1027 Epoch [564/1000], Loss: 0.1026 Epoch [565/1000], Loss: 0.1025 Epoch [566/1000], Loss: 0.1025 Epoch [567/1000], Loss: 0.1025 Epoch [568/1000], Loss: 0.1026 Epoch [569/1000], Loss: 0.1024 Epoch [570/1000], Loss: 0.1022 Epoch [571/1000], Loss: 0.1021 Epoch [572/1000], Loss: 0.1021 Epoch [573/1000], Loss: 0.1021 Epoch [574/1000], Loss: 0.1023 Epoch [575/1000], Loss: 0.1024 Epoch [576/1000], Loss: 0.1024 Epoch [577/1000], Loss: 0.1023 Epoch [578/1000], Loss: 0.1023 Epoch [579/1000], Loss: 0.1022 Epoch [580/1000], Loss: 0.1022 Epoch [581/1000], Loss: 0.1022 Epoch [582/1000], Loss: 0.1023 Epoch [583/1000], Loss: 0.1023 Epoch [584/1000], Loss: 0.1022 Epoch [585/1000], Loss: 0.1021 Epoch [586/1000], Loss: 0.1022 Epoch [587/1000], Loss: 0.1021 Epoch [588/1000], Loss: 0.1021 Epoch [589/1000], Loss: 0.1021 Epoch [590/1000], Loss: 0.1021 Epoch [591/1000], Loss: 0.1022 Epoch [592/1000], Loss: 0.1023 Epoch [593/1000], Loss: 0.1024 Epoch [594/1000], Loss: 0.1026 Epoch [595/1000], Loss: 0.1027 Epoch [596/1000], Loss: 0.1028 Epoch [597/1000], Loss: 0.1029 Epoch [598/1000], Loss: 0.1028 Epoch [599/1000], Loss: 0.1027 Epoch [600/1000], Loss: 0.1025 Epoch [601/1000], Loss: 0.1022 Epoch [602/1000], Loss: 0.1020 Epoch [603/1000], Loss: 0.1018 Epoch [604/1000], Loss: 0.1017 Epoch [605/1000], Loss: 0.1017 Epoch [606/1000], Loss: 0.1016 Epoch [607/1000], Loss: 0.1017 Epoch [608/1000], Loss: 0.1017 Epoch [609/1000], Loss: 0.1018 Epoch [610/1000], Loss: 0.1019 Epoch [611/1000], Loss: 0.1021 Epoch [612/1000], Loss: 0.1022 Epoch [613/1000], Loss: 0.1024 Epoch [614/1000], Loss: 0.1025 Epoch [615/1000], Loss: 0.1026 Epoch [616/1000], Loss: 0.1025 Epoch [617/1000], Loss: 0.1024 Epoch [618/1000], Loss: 0.1022 Epoch [619/1000], Loss: 0.1020 Epoch [620/1000], Loss: 0.1018 Epoch [621/1000], Loss: 0.1016 Epoch [622/1000], Loss: 0.1015 Epoch [623/1000], Loss: 0.1015 Epoch [624/1000], Loss: 0.1015 Epoch [625/1000], Loss: 0.1015 Epoch [626/1000], Loss: 0.1016 Epoch [627/1000], Loss: 0.1016 Epoch [628/1000], Loss: 0.1017 Epoch [629/1000], Loss: 0.1017 Epoch [630/1000], Loss: 0.1018 Epoch [631/1000], Loss: 0.1019 Epoch [632/1000], Loss: 0.1019 Epoch [633/1000], Loss: 0.1021 Epoch [634/1000], Loss: 0.1021 Epoch [635/1000], Loss: 0.1022 Epoch [636/1000], Loss: 0.1022 Epoch [637/1000], Loss: 0.1021 Epoch [638/1000], Loss: 0.1020 Epoch [639/1000], Loss: 0.1018 Epoch [640/1000], Loss: 0.1018 Epoch [641/1000], Loss: 0.1017 Epoch [642/1000], Loss: 0.1018 Epoch [643/1000], Loss: 0.1018 Epoch [644/1000], Loss: 0.1019 Epoch [645/1000], Loss: 0.1019 Epoch [646/1000], Loss: 0.1018 Epoch [647/1000], Loss: 0.1016 Epoch [648/1000], Loss: 0.1014 Epoch [649/1000], Loss: 0.1013 Epoch [650/1000], Loss: 0.1013 Epoch [651/1000], Loss: 0.1013 Epoch [652/1000], Loss: 0.1013 Epoch [653/1000], Loss: 0.1013 Epoch [654/1000], Loss: 0.1015 Epoch [655/1000], Loss: 0.1015 Epoch [656/1000], Loss: 0.1015 Epoch [657/1000], Loss: 0.1016 Epoch [658/1000], Loss: 0.1016 Epoch [659/1000], Loss: 0.1017 Epoch [660/1000], Loss: 0.1018 Epoch [661/1000], Loss: 0.1018 Epoch [662/1000], Loss: 0.1019 Epoch [663/1000], Loss: 0.1018 Epoch [664/1000], Loss: 0.1017 Epoch [665/1000], Loss: 0.1015 Epoch [666/1000], Loss: 0.1013 Epoch [667/1000], Loss: 0.1012 Epoch [668/1000], Loss: 0.1011 Epoch [669/1000], Loss: 0.1010 Epoch [670/1000], Loss: 0.1011 Epoch [671/1000], Loss: 0.1011 Epoch [672/1000], Loss: 0.1013 Epoch [673/1000], Loss: 0.1014 Epoch [674/1000], Loss: 0.1015 Epoch [675/1000], Loss: 0.1014 Epoch [676/1000], Loss: 0.1014 Epoch [677/1000], Loss: 0.1014 Epoch [678/1000], Loss: 0.1014 Epoch [679/1000], Loss: 0.1014 Epoch [680/1000], Loss: 0.1015 Epoch [681/1000], Loss: 0.1017 Epoch [682/1000], Loss: 0.1019 Epoch [683/1000], Loss: 0.1020 Epoch [684/1000], Loss: 0.1022 Epoch [685/1000], Loss: 0.1021 Epoch [686/1000], Loss: 0.1020 Epoch [687/1000], Loss: 0.1018 Epoch [688/1000], Loss: 0.1015 Epoch [689/1000], Loss: 0.1013 Epoch [690/1000], Loss: 0.1011 Epoch [691/1000], Loss: 0.1009 Epoch [692/1000], Loss: 0.1008 Epoch [693/1000], Loss: 0.1008 Epoch [694/1000], Loss: 0.1009 Epoch [695/1000], Loss: 0.1009 Epoch [696/1000], Loss: 0.1011 Epoch [697/1000], Loss: 0.1012 Epoch [698/1000], Loss: 0.1013 Epoch [699/1000], Loss: 0.1014 Epoch [700/1000], Loss: 0.1013 Epoch [701/1000], Loss: 0.1013 Epoch [702/1000], Loss: 0.1012 Epoch [703/1000], Loss: 0.1012 Epoch [704/1000], Loss: 0.1011 Epoch [705/1000], Loss: 0.1011 Epoch [706/1000], Loss: 0.1011 Epoch [707/1000], Loss: 0.1011 Epoch [708/1000], Loss: 0.1012 Epoch [709/1000], Loss: 0.1012 Epoch [710/1000], Loss: 0.1011 Epoch [711/1000], Loss: 0.1010 Epoch [712/1000], Loss: 0.1009 Epoch [713/1000], Loss: 0.1008 Epoch [714/1000], Loss: 0.1007 Epoch [715/1000], Loss: 0.1007 Epoch [716/1000], Loss: 0.1007 Epoch [717/1000], Loss: 0.1007 Epoch [718/1000], Loss: 0.1007 Epoch [719/1000], Loss: 0.1007 Epoch [720/1000], Loss: 0.1006 Epoch [721/1000], Loss: 0.1006 Epoch [722/1000], Loss: 0.1007 Epoch [723/1000], Loss: 0.1007 Epoch [724/1000], Loss: 0.1008 Epoch [725/1000], Loss: 0.1009 Epoch [726/1000], Loss: 0.1011 Epoch [727/1000], Loss: 0.1013 Epoch [728/1000], Loss: 0.1016 Epoch [729/1000], Loss: 0.1019 Epoch [730/1000], Loss: 0.1021 Epoch [731/1000], Loss: 0.1020 Epoch [732/1000], Loss: 0.1018 Epoch [733/1000], Loss: 0.1015 Epoch [734/1000], Loss: 0.1012 Epoch [735/1000], Loss: 0.1010 Epoch [736/1000], Loss: 0.1010 Epoch [737/1000], Loss: 0.1011 Epoch [738/1000], Loss: 0.1011 Epoch [739/1000], Loss: 0.1011 Epoch [740/1000], Loss: 0.1010 Epoch [741/1000], Loss: 0.1008 Epoch [742/1000], Loss: 0.1006 Epoch [743/1000], Loss: 0.1005 Epoch [744/1000], Loss: 0.1004 Epoch [745/1000], Loss: 0.1005 Epoch [746/1000], Loss: 0.1005 Epoch [747/1000], Loss: 0.1006 Epoch [748/1000], Loss: 0.1008 Epoch [749/1000], Loss: 0.1008 Epoch [750/1000], Loss: 0.1008 Epoch [751/1000], Loss: 0.1007 Epoch [752/1000], Loss: 0.1007 Epoch [753/1000], Loss: 0.1007 Epoch [754/1000], Loss: 0.1008 Epoch [755/1000], Loss: 0.1009 Epoch [756/1000], Loss: 0.1011 Epoch [757/1000], Loss: 0.1014 Epoch [758/1000], Loss: 0.1016 Epoch [759/1000], Loss: 0.1018 Epoch [760/1000], Loss: 0.1017 Epoch [761/1000], Loss: 0.1016 Epoch [762/1000], Loss: 0.1013 Epoch [763/1000], Loss: 0.1011 Epoch [764/1000], Loss: 0.1008 Epoch [765/1000], Loss: 0.1006 Epoch [766/1000], Loss: 0.1005 Epoch [767/1000], Loss: 0.1005 Epoch [768/1000], Loss: 0.1005 Epoch [769/1000], Loss: 0.1006 Epoch [770/1000], Loss: 0.1006 Epoch [771/1000], Loss: 0.1006 Epoch [772/1000], Loss: 0.1005 Epoch [773/1000], Loss: 0.1005 Epoch [774/1000], Loss: 0.1005 Epoch [775/1000], Loss: 0.1005 Epoch [776/1000], Loss: 0.1005 Epoch [777/1000], Loss: 0.1004 Epoch [778/1000], Loss: 0.1005 Epoch [779/1000], Loss: 0.1005 Epoch [780/1000], Loss: 0.1005 Epoch [781/1000], Loss: 0.1005 Epoch [782/1000], Loss: 0.1005 Epoch [783/1000], Loss: 0.1006 Epoch [784/1000], Loss: 0.1006 Epoch [785/1000], Loss: 0.1008 Epoch [786/1000], Loss: 0.1009 Epoch [787/1000], Loss: 0.1011 Epoch [788/1000], Loss: 0.1013 Epoch [789/1000], Loss: 0.1015 Epoch [790/1000], Loss: 0.1015 Epoch [791/1000], Loss: 0.1014 Epoch [792/1000], Loss: 0.1013 Epoch [793/1000], Loss: 0.1011 Epoch [794/1000], Loss: 0.1010 Epoch [795/1000], Loss: 0.1009 Epoch [796/1000], Loss: 0.1009 Epoch [797/1000], Loss: 0.1008 Epoch [798/1000], Loss: 0.1008 Epoch [799/1000], Loss: 0.1007 Epoch [800/1000], Loss: 0.1006 Epoch [801/1000], Loss: 0.1005 Epoch [802/1000], Loss: 0.1004 Epoch [803/1000], Loss: 0.1004 Epoch [804/1000], Loss: 0.1004 Epoch [805/1000], Loss: 0.1005 Epoch [806/1000], Loss: 0.1006 Epoch [807/1000], Loss: 0.1007 Epoch [808/1000], Loss: 0.1008 Epoch [809/1000], Loss: 0.1009 Epoch [810/1000], Loss: 0.1009 Epoch [811/1000], Loss: 0.1010 Epoch [812/1000], Loss: 0.1008 Epoch [813/1000], Loss: 0.1008 Epoch [814/1000], Loss: 0.1006 Epoch [815/1000], Loss: 0.1005 Epoch [816/1000], Loss: 0.1004 Epoch [817/1000], Loss: 0.1003 Epoch [818/1000], Loss: 0.1004 Epoch [819/1000], Loss: 0.1004 Epoch [820/1000], Loss: 0.1004 Epoch [821/1000], Loss: 0.1004 Epoch [822/1000], Loss: 0.1004 Epoch [823/1000], Loss: 0.1003 Epoch [824/1000], Loss: 0.1003 Epoch [825/1000], Loss: 0.1002 Epoch [826/1000], Loss: 0.1002 Epoch [827/1000], Loss: 0.1002 Epoch [828/1000], Loss: 0.1002 Epoch [829/1000], Loss: 0.1003 Epoch [830/1000], Loss: 0.1004 Epoch [831/1000], Loss: 0.1005 Epoch [832/1000], Loss: 0.1006 Epoch [833/1000], Loss: 0.1007 Epoch [834/1000], Loss: 0.1008 Epoch [835/1000], Loss: 0.1008 Epoch [836/1000], Loss: 0.1008 Epoch [837/1000], Loss: 0.1007 Epoch [838/1000], Loss: 0.1006 Epoch [839/1000], Loss: 0.1005 Epoch [840/1000], Loss: 0.1004 Epoch [841/1000], Loss: 0.1004 Epoch [842/1000], Loss: 0.1005 Epoch [843/1000], Loss: 0.1006 Epoch [844/1000], Loss: 0.1009 Epoch [845/1000], Loss: 0.1011 Epoch [846/1000], Loss: 0.1014 Epoch [847/1000], Loss: 0.1016 Epoch [848/1000], Loss: 0.1017 Epoch [849/1000], Loss: 0.1017 Epoch [850/1000], Loss: 0.1016 Epoch [851/1000], Loss: 0.1015 Epoch [852/1000], Loss: 0.1012 Epoch [853/1000], Loss: 0.1009 Epoch [854/1000], Loss: 0.1006 Epoch [855/1000], Loss: 0.1003 Epoch [856/1000], Loss: 0.1001 Epoch [857/1000], Loss: 0.1001 Epoch [858/1000], Loss: 0.1001 Epoch [859/1000], Loss: 0.1003 Epoch [860/1000], Loss: 0.1005 Epoch [861/1000], Loss: 0.1007 Epoch [862/1000], Loss: 0.1007 Epoch [863/1000], Loss: 0.1006 Epoch [864/1000], Loss: 0.1005 Epoch [865/1000], Loss: 0.1005 Epoch [866/1000], Loss: 0.1004 Epoch [867/1000], Loss: 0.1004 Epoch [868/1000], Loss: 0.1003 Epoch [869/1000], Loss: 0.1003 Epoch [870/1000], Loss: 0.1002 Epoch [871/1000], Loss: 0.1001 Epoch [872/1000], Loss: 0.1000 Epoch [873/1000], Loss: 0.1000 Epoch [874/1000], Loss: 0.1000 Epoch [875/1000], Loss: 0.1000 Epoch [876/1000], Loss: 0.1000 Epoch [877/1000], Loss: 0.1001 Epoch [878/1000], Loss: 0.1001 Epoch [879/1000], Loss: 0.1001 Epoch [880/1000], Loss: 0.1002 Epoch [881/1000], Loss: 0.1002 Epoch [882/1000], Loss: 0.1003 Epoch [883/1000], Loss: 0.1003 Epoch [884/1000], Loss: 0.1004 Epoch [885/1000], Loss: 0.1005 Epoch [886/1000], Loss: 0.1006 Epoch [887/1000], Loss: 0.1007 Epoch [888/1000], Loss: 0.1009 Epoch [889/1000], Loss: 0.1010 Epoch [890/1000], Loss: 0.1011 Epoch [891/1000], Loss: 0.1011 Epoch [892/1000], Loss: 0.1011 Epoch [893/1000], Loss: 0.1010 Epoch [894/1000], Loss: 0.1009 Epoch [895/1000], Loss: 0.1007 Epoch [896/1000], Loss: 0.1005 Epoch [897/1000], Loss: 0.1004 Epoch [898/1000], Loss: 0.1003 Epoch [899/1000], Loss: 0.1002 Epoch [900/1000], Loss: 0.1001 Epoch [901/1000], Loss: 0.1001 Epoch [902/1000], Loss: 0.1002 Epoch [903/1000], Loss: 0.1002 Epoch [904/1000], Loss: 0.1003 Epoch [905/1000], Loss: 0.1005 Epoch [906/1000], Loss: 0.1005 Epoch [907/1000], Loss: 0.1006 Epoch [908/1000], Loss: 0.1005 Epoch [909/1000], Loss: 0.1005 Epoch [910/1000], Loss: 0.1003 Epoch [911/1000], Loss: 0.1001 Epoch [912/1000], Loss: 0.0999 Epoch [913/1000], Loss: 0.0998 Epoch [914/1000], Loss: 0.0997 Epoch [915/1000], Loss: 0.0997 Epoch [916/1000], Loss: 0.0997 Epoch [917/1000], Loss: 0.0997 Epoch [918/1000], Loss: 0.0998 Epoch [919/1000], Loss: 0.0998 Epoch [920/1000], Loss: 0.0999 Epoch [921/1000], Loss: 0.1000 Epoch [922/1000], Loss: 0.1001 Epoch [923/1000], Loss: 0.1002 Epoch [924/1000], Loss: 0.1002 Epoch [925/1000], Loss: 0.1003 Epoch [926/1000], Loss: 0.1003 Epoch [927/1000], Loss: 0.1003 Epoch [928/1000], Loss: 0.1003 Epoch [929/1000], Loss: 0.1003 Epoch [930/1000], Loss: 0.1002 Epoch [931/1000], Loss: 0.1001 Epoch [932/1000], Loss: 0.1000 Epoch [933/1000], Loss: 0.1000 Epoch [934/1000], Loss: 0.1000 Epoch [935/1000], Loss: 0.0999 Epoch [936/1000], Loss: 0.0998 Epoch [937/1000], Loss: 0.0998 Epoch [938/1000], Loss: 0.0998 Epoch [939/1000], Loss: 0.0998 Epoch [940/1000], Loss: 0.0998 Epoch [941/1000], Loss: 0.0998 Epoch [942/1000], Loss: 0.0998 Epoch [943/1000], Loss: 0.0999 Epoch [944/1000], Loss: 0.1000 Epoch [945/1000], Loss: 0.1002 Epoch [946/1000], Loss: 0.1004 Epoch [947/1000], Loss: 0.1006 Epoch [948/1000], Loss: 0.1007 Epoch [949/1000], Loss: 0.1007 Epoch [950/1000], Loss: 0.1007 Epoch [951/1000], Loss: 0.1006 Epoch [952/1000], Loss: 0.1006 Epoch [953/1000], Loss: 0.1007 Epoch [954/1000], Loss: 0.1010 Epoch [955/1000], Loss: 0.1012 Epoch [956/1000], Loss: 0.1012 Epoch [957/1000], Loss: 0.1010 Epoch [958/1000], Loss: 0.1006 Epoch [959/1000], Loss: 0.1001 Epoch [960/1000], Loss: 0.0998 Epoch [961/1000], Loss: 0.0996 Epoch [962/1000], Loss: 0.0996 Epoch [963/1000], Loss: 0.0996 Epoch [964/1000], Loss: 0.0997 Epoch [965/1000], Loss: 0.0999 Epoch [966/1000], Loss: 0.1000 Epoch [967/1000], Loss: 0.1001 Epoch [968/1000], Loss: 0.1001 Epoch [969/1000], Loss: 0.1001 Epoch [970/1000], Loss: 0.1000 Epoch [971/1000], Loss: 0.1000 Epoch [972/1000], Loss: 0.0999 Epoch [973/1000], Loss: 0.1000 Epoch [974/1000], Loss: 0.0998 Epoch [975/1000], Loss: 0.0999 Epoch [976/1000], Loss: 0.0999 Epoch [977/1000], Loss: 0.0999 Epoch [978/1000], Loss: 0.0999 Epoch [979/1000], Loss: 0.0999 Epoch [980/1000], Loss: 0.0999 Epoch [981/1000], Loss: 0.0998 Epoch [982/1000], Loss: 0.0998 Epoch [983/1000], Loss: 0.0998 Epoch [984/1000], Loss: 0.0999 Epoch [985/1000], Loss: 0.0999 Epoch [986/1000], Loss: 0.1000 Epoch [987/1000], Loss: 0.1001 Epoch [988/1000], Loss: 0.1002 Epoch [989/1000], Loss: 0.1002 Epoch [990/1000], Loss: 0.1002 Epoch [991/1000], Loss: 0.1002 Epoch [992/1000], Loss: 0.1002 Epoch [993/1000], Loss: 0.1001 Epoch [994/1000], Loss: 0.1000 Epoch [995/1000], Loss: 0.0999 Epoch [996/1000], Loss: 0.0998 Epoch [997/1000], Loss: 0.0998 Epoch [998/1000], Loss: 0.0998 Epoch [999/1000], Loss: 0.0998 Epoch [1000/1000], Loss: 0.0997
plt.imsave("experiment_1.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_1.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