How to increase the size of deconv2d filters for a fixed data size?

I am trying to configure this DCGAN code to be able to work with 2x80 sample data.

All generator layers are tf.nn.deconv2d except h0, that is, ReLu. Generator filter dimensions at current level:

 Generator: h0: s_h16 x s_w16: 1 x 5 Generator: h1: s_h8 x s_w8: 1 x 10 Generator: h2: s_h4 x s_w4: 1 x 20 Generator: h3: s_h2 x s_w2: 1 x 40 Generator: h4: s_h x s_w: 2 x 80 

Due to the nature of my data, I would like it to be initially generated as 2 x ..., that is, for filters there would be 2 x 5 , 2 x 10 , 2 x 20 , 2 x 40 and 2 x 80 , However, when I just manually enter s_h16 = 2 * s_h16 , etc. Before s_h2 = 2 * s_h2 , I run the following error:

 ValueError: Shapes (64, 1, 40, 64) and (64, 2, 40, 64) are not compatible 

So, I know that the error occurs at the h3 level, but I can not completely track it (64 here is the batch size). Any ideas how this can be fixed?


Edit: the edited DCGANs code in this repository after configuring DCGAN-tensorflow as in the instructions , you need to put the Data_npy folder in the DCGAN-tensorflow/data folder.

Then running python main.py --dataset Data_npy --input_height=2 --output_height=2 --train will give you the error I am getting.

A complete error trace is as follows:

 Traceback (most recent call last): File "/home/marija/.local/lib/python3.5/site-packages/tensorflow/python/framework/tensor_shape.py", line 560, in merge_with new_dims.append(dim.merge_with(other[i])) File "/home/marija/.local/lib/python3.5/site-packages/tensorflow/python/framework/tensor_shape.py", line 135, in merge_with self.assert_is_compatible_with(other) File "/home/marija/.local/lib/python3.5/site-packages/tensorflow/python/framework/tensor_shape.py", line 108, in assert_is_compatible_with % (self, other)) ValueError: Dimensions 1 and 2 are not compatible During handling of the above exception, another exception occurred: Traceback (most recent call last): File "main.py", line 97, in <module> tf.app.run() File "/home/marija/.local/lib/python3.5/site-packages/tensorflow/python/platform/app.py", line 48, in run _sys.exit(main(_sys.argv[:1] + flags_passthrough)) File "main.py", line 80, in main dcgan.train(FLAGS) File "/home/marija/DCGAN-tensorflow/model.py", line 180, in train .minimize(self.g_loss, var_list=self.g_vars) File "/home/marija/.local/lib/python3.5/site-packages/tensorflow/python/training/optimizer.py", line 315, in minimize grad_loss=grad_loss) File "/home/marija/.local/lib/python3.5/site-packages/tensorflow/python/training/optimizer.py", line 386, in compute_gradients colocate_gradients_with_ops=colocate_gradients_with_ops) File "/home/marija/.local/lib/python3.5/site-packages/tensorflow/python/ops/gradients_impl.py", line 580, in gradients in_grad.set_shape(t_in.get_shape()) File "/home/marija/.local/lib/python3.5/site-packages/tensorflow/python/framework/ops.py", line 413, in set_shape self._shape = self._shape.merge_with(shape) File "/home/marija/.local/lib/python3.5/site-packages/tensorflow/python/framework/tensor_shape.py", line 564, in merge_with (self, other)) ValueError: Shapes (64, 1, 40, 64) and (64, 2, 40, 64) are not compatible 
+5
source share
1 answer

In the ops.py file

your problem comes from the step size in your deconv filter, change the header for conv2d and deconv2d to:

 def conv2d(input_, output_dim, k_h=5, k_w=5, d_h=1, d_w=2, stddev=0.02, name="conv2d"): def deconv2d(input_, output_shape, k_h=5, k_w=5, d_h=1, d_w=2, stddev=0.02, name="deconv2d", with_w=False): 

I liked that he began to train for me. I did not check the output, though.

The problem is to consider the shape of your input by clicking on the height 2 (the original value for d_h), the form (64, 1, 40, 64) will be obtained during back propagation. (Because you only have 2 values)

You can also think of changing k_h=5 to k_h=2 as taking 5 elements at a height, if you have only 2, this does not make much sense.

+2
source

Source: https://habr.com/ru/post/1268442/


All Articles