Hey guys.
I try to get acquainted with neural networks and PyTorch.
Usually first af all I just want to understand what results I can achieve and how quickly, if I use something and do not go into details much.
I liked the idea of GAN networks.
I found this example, downloaded it and did the following:
-
created a folder inside the repository named Img
in this folder I created another folder Img
and copied there several cat faces in jpg.
(This is my training data) -
in the config file, in line
parser.add_argument(’–train_data_root’, type=str, default=’/home1/irteam/nashory/data/CelebA/Img’)
I replaced ‘/home1/irteam/nashory/data/CelebA/Img’ by ‘Img’.
This is the path to folder with my training data (cats). -
ran trainer.py
As result I have this error:
----------------- configuration -----------------
flag_wn: True
stab_tick: 100
flag_norm_latent: False
flag_gdrop: True
optimizer: adam
TICK: 1000
ngf: 512
flag_sigmoid: False
nc: 3
smoothing: 0.997
save_img_every: 20
nz: 512
lr: 0.001
beta2: 0.99
flag_bn: False
train_data_root: Img
trns_tick: 200
lr_decay: 0.87
display_tb_every: 5
flag_add_drift: True
flag_tanh: False
random_seed: 1537970835
beta1: 0.0
flag_leaky: True
eps_drift: 0.001
max_resl: 8
n_gpu: 1
flag_add_noise: True
use_tb: True
ndf: 512
flag_pixelwise: True
-------------------------------------------------
/media/me2beats/601616D21616A8D4/ubuntu_download/nvidia gans/pggan-pytorch-master/custom_layers.py:104: UserWarning: nn.init.kaiming_normal is now deprecated in favor of nn.init.kaiming_normal_.
if initializer == 'kaiming': kaiming_normal(self.conv.weight, a=calculate_gain('conv2d'))
/media/me2beats/601616D21616A8D4/ubuntu_download/nvidia gans/pggan-pytorch-master/custom_layers.py:137: UserWarning: nn.init.kaiming_normal is now deprecated in favor of nn.init.kaiming_normal_.
if initializer == 'kaiming': kaiming_normal(self.linear.weight, a=calculate_gain('linear'))
Generator structure:
Sequential(
(first_block): Sequential(
(0): equalized_conv2d(
(conv): Conv2d(512, 512, kernel_size=(4, 4), stride=(1, 1), padding=(3, 3), bias=False)
)
(1): LeakyReLU(negative_slope=0.2)
(2): pixelwise_norm_layer()
(3): equalized_conv2d(
(conv): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
)
(4): LeakyReLU(negative_slope=0.2)
(5): pixelwise_norm_layer()
)
(to_rgb_block): Sequential(
(0): equalized_conv2d(
(conv): Conv2d(512, 3, kernel_size=(1, 1), stride=(1, 1), bias=False)
)
)
)
Discriminator structure:
Sequential(
(from_rgb_block): Sequential(
(0): generalized_drop_out(mode = prop, strength = 0.0, axes = [0, 1], normalize = False)
(1): equalized_conv2d(
(conv): Conv2d(3, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
)
(2): LeakyReLU(negative_slope=0.2)
)
(last_block): Sequential(
(0): minibatch_std_concat_layer(averaging = all)
(1): generalized_drop_out(mode = prop, strength = 0.0, axes = [0, 1], normalize = False)
(2): equalized_conv2d(
(conv): Conv2d(513, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
)
(3): LeakyReLU(negative_slope=0.2)
(4): generalized_drop_out(mode = prop, strength = 0.0, axes = [0, 1], normalize = False)
(5): equalized_conv2d(
(conv): Conv2d(512, 512, kernel_size=(4, 4), stride=(1, 1), bias=False)
)
(6): LeakyReLU(negative_slope=0.2)
(7): Flatten()
(8): equalized_linear(
(linear): Linear(in_features=512, out_features=1, bias=False)
)
)
)
[*] Renew dataloader configuration, load data from Img.
/usr/local/lib/python2.7/dist-packages/torchvision/transforms/transforms.py:188: UserWarning: The use of the transforms.Scale transform is deprecated, please use transforms.Resize instead.
"please use transforms.Resize instead.")
trainer.py:245: UserWarning: volatile was removed and now has no effect. Use `with torch.no_grad():` instead.
self.z_test = Variable(self.z_test, volatile=True)
0%| | 0/18750 [00:00<?, ?it/s]Exception KeyError: KeyError(<weakref at 0x7f495fb62788; to 'tqdm' at 0x7f495fb5fd50>,) in <bound method tqdm.__del__ of 0%| | 0/18750 [00:01<?, ?it/s]> ignored
Traceback (most recent call last):
File "trainer.py", line 352, in <module>
trainer.train()
File "trainer.py", line 273, in train
loss_d = self.mse(self.fx, self.real_label) + self.mse(self.fx_tilde, self.fake_label)
File "/usr/local/lib/python2.7/dist-packages/torch/nn/modules/module.py", line 477, in __call__
result = self.forward(*input, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/torch/nn/modules/loss.py", line 421, in forward
return F.mse_loss(input, target, reduction=self.reduction)
File "/usr/local/lib/python2.7/dist-packages/torch/nn/functional.py", line 1716, in mse_loss
return _pointwise_loss(lambda a, b: (a - b) ** 2, torch._C._nn.mse_loss, input, target, reduction)
File "/usr/local/lib/python2.7/dist-packages/torch/nn/functional.py", line 1674, in _pointwise_loss
return lambd_optimized(input, target, reduction)
RuntimeError: input and target shapes do not match: input [32 x 1], target [32] at /pytorch/aten/src/THNN/generic/MSECriterion.c:12
I can see here some dimensional error - input is [32 x 1], but target is [32].
The search for the problem is complicated because I have not yet realized what these numbers mean.
I just can note that when I change the number of images in the training folder, the input shape also changes:
input [1 x 1] - for 1 photo in Img folder, input [2 x 1] - for 2 photos etc, but never bigger than input [32 x 1]
Also I see 2 user warnings:
-
transforms.py:188: UserWarning: The use of the transforms.Scale transform is deprecated, please use transforms.Resize instead.
“please use transforms.Resize instead.”) -
trainer.py:245: UserWarning: volatile was removed and now has no effect. Use
with torch.no_grad():
instead.
But If I understand right, this is not that causes the error.
[because I tried to replace deprecated transforms.Scale with transforms.Resize,
(just changed the name of the method)
and the error remained]
It is also unlikely that this is due to the properties of the input files. For example, I do not think that they should be the same size or square.
My opinion is, somewhere, the error is because of I’m using a new version of PyTorch (I pip installed it just a few hours ago). Rather, it’s a feature, not an issue or bug.
Any ideas, because of what it can be and how to solve the problem?