2017-06-01 37 views
5

Próbuję dostosować to DCGAN code, aby móc pracować z 2x80 próbek danych.Jak zwiększyć rozmiar filtrów deconv2d dla ustalonego rozmiaru danych?

Wszystkie warstwy są inne niż h0, co oznacza ReLu. rozmiary filtrów generator na poziomie są obecnie:

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 

Ze względu na charakter moich danych chciałabym im być początkowo generowane jako 2 X ..., to znaczy do filtrów być 2 x 5, 2 x 10, 2 x 20, 2 x 40, i 2 x 80. Jednak kiedy tylko ręcznie wprowadzić s_h16 = 2 * s_h16 i tak dalej, aż do s_h2 = 2 * s_h2, biegnę w następujący błąd:

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

więc wiem, że błąd ma miejsce w h3 poziomie, ale nie mogę dość śledzenia go w dół (64 tutaj jest wielkość partii). Jakieś pomysły, jak to naprawić?


Edit: edytowany kod DCGANs jest in this repository, po DCGAN-tensorflow jest utworzenie as in the instructions trzeba by umieścić w folderze Data_npy DCGAN-tensorflow/data folderu.

Następnie uruchomiony python main.py --dataset Data_npy --input_height=2 --output_height=2 --train dostarczy błąd, który otrzymam.

Pełne błąd traceback wygląda następująco:

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 
+0

należy udostępnić dane wejściowe próbki i kod zmodyfikowany z oryginalnych połączonych przykładów. prosty opis nie jest wystarczający масяня))) potrzebne jest również pełne prześledzenie ze zmiennymi lokalnymi, np. http://ipython.readthedocs.io/en/stable/interactive/magics.html#magic-xmode lub https://github.com/skorokithakis/tbvaccine – denfromufa

+0

Czy masz minimalny powtarzalny przykład, który możesz udostępnić? – Alex

+0

Przykładowe dane wejściowe, kod i śledzenie błędów są dostępne w edycji pytania zgodnie z wymaganiami, proszę dać mi znać, jeśli jest coś, co może pomóc. – Massyanya

Odpowiedz

2

W pliku ops.py

problem pochodzą z wielkością Kroczący w filtrze deconv, zmodyfikować nagłówek dla conv2d i deconv2d do:

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): 

Tak się zaczęło dla mnie trenować. Nie sprawdziłem jednak danych wyjściowych.

Problem polega na rozważeniu kształtu danych wejściowych, obcinanie na wysokość o 2 (oryginalna wartość d_h) będzie skutkować kształtem (64, 1, 40, 64) podczas propagacji wstecznej. (Ponieważ masz tylko 2 wartości)

Możesz także pomyśleć o zmianie k_h=5 na k_h=2, ponieważ przyjęcie 5 elementów na wysokość, gdy tylko 2 nie ma tyle sensu.

+0

Dziękuję bardzo - Zaczęło mnie też trenować. – Massyanya