2017-06-01 99 views
5

我正試圖調整這個DCGAN code以便能夠使用2x80數據樣本。如何增加固定數據大小的deconv2d過濾器的大小?

全部generator層是tf.nn.deconv2d而不是h0,這是ReLu。每級發電機過濾器尺寸是目前:

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 

因爲我的數據的性質,我想他們是2×......最初產生,即用於過濾器是2 x 52 x 102 x 202 x 40的,和2 x 80。然而,當我剛剛手動輸入s_h16 = 2 * s_h16等多達s_h2 = 2 * s_h2,我遇到了以下錯誤:

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

所以我知道錯誤在一級H3發生,但我不能完全追查( 64這裏是批量大小)。任何想法如何解決這個問題?


編輯:編輯的DCGANs代碼爲in this repository,後DCGAN-tensorflow是建立as in the instructions你不得不Data_npy文件夾放到DCGAN-tensorflow/data文件夾中。

然後運行python main.py --dataset Data_npy --input_height=2 --output_height=2 --train會爲您提供我得到的錯誤。

完整的錯誤回溯看起來如下:

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

您需要分享您的輸入樣本數據以及您從原始鏈接示例修改的代碼。簡單的描述是不夠的масяня)))也需要使用局部變量的全部回溯,例如, http://ipython.readthedocs.io/en/stable/interactive/magics.html#magic-xmode或https://github.com/skorokithakis/tbvaccine – denfromufa

+0

你有一個可重複使用的最小范例,你可以分享嗎? – Alex

+0

示例輸入數據,代碼和錯誤回溯在編輯時根據要求提供,請讓我知道是否還有其他可以幫助的問題。 – Massyanya

回答

2

在你ops.py文件

在deconv過濾來自跨步大小您的問題,修改頭爲conv2ddeconv2d到:

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

像這樣,它開始爲我訓練。儘管我沒有檢查輸出。

問題是考慮到您的輸入的形狀,高度的嚴格度爲2(原始值爲d_h)將由反向傳播期間的(64, 1, 40, 64)形狀產生。 (因爲你只有2個值)

你也可能會認爲改變k_h=5k_h=2作爲高5元素,當你只有2沒有多大意義。

+0

非常感謝 - 它也開始訓練我。 – Massyanya