构建cycleGAN运行到鉴别器的优化时报错Conv2DCustomBackpropInput:input depth must be evenly divisible by filter depth求处理办法o(╥﹏╥)o
def discriminator(x,name,is_training=True):
reuse=len([var for var in tf.trainable_variables() if var.name.startswith(name)])>0
with tf.variable_scope(name,reuse=reuse):
#256 3->128 64
layer_1=tf.layers.conv2d(x,64,4,2,padding='SAME')
layer_1=tf.nn.leaky_relu(layer_1)
#128 64->64 128
layer_2=tf.layers.batch_normalization(tf.layers.conv2d(layer_1,128,4,2,padding='SAME'),training=is_training)
layer_2=tf.nn.leaky_relu(layer_2)
#64 128->32 256
layer_3=tf.layers.batch_normalization(tf.layers.conv2d(layer_2,256,4,2,padding='SAME'),training=is_training)
layer_3=tf.nn.leaky_relu(layer_3)
layer=tf.layers.conv2d(layer_3,1,4,1,padding='SAME')
return layer
鉴别器的结构如上,为复现论文的结果
损失函数为交叉熵
#判别器器损失
d_x=tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=disc_fake_x,labels=tf.zeros_like(disc_fake_x)))+tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=disc_real_x,labels=tf.ones_like(disc_real_x)))
d_y=tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=disc_fake_y,labels=tf.zeros_like(disc_fake_y)))+tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=disc_real_y,labels=tf.ones_like(disc_real_y)))
d_loss=d_y+d_x
完整报错:
Traceback (most recent call last):
File "C:\Users\lenovo\Desktop\library\CycleGAN\CycleGan.py", line 150, in <module>
sess.run(g_train,fd)
File "c:\users\lenovo\appdata\local\programs\python\python37\lib\site-packages\tensorflow\python\client\session.py", line 900, in run
run_metadata_ptr)
File "c:\users\lenovo\appdata\local\programs\python\python37\lib\site-packages\tensorflow\python\client\session.py", line 1135, in _run
feed_dict_tensor, options, run_metadata)
File "c:\users\lenovo\appdata\local\programs\python\python37\lib\site-packages\tensorflow\python\client\session.py", line 1316, in _do_run
run_metadata)
File "c:\users\lenovo\appdata\local\programs\python\python37\lib\site-packages\tensorflow\python\client\session.py", line 1335, in _do_call
raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.InvalidArgumentError: Conv2DCustomBackpropInput: input depth must be evenly divisible by filter depth
[[Node: gradients_1/discriminator_d_x/conv2d_3/Conv2D_grad/Conv2DBackpropInput = _MklConv2DBackpropInput[T=DT_FLOAT, _kernel="MklOp", data_format="NHWC", dilations=[1, 1, 1, 1], padding="SAME", strides=[1, 1, 1, 1], use_cudnn_on_gpu=true, _device="/job:localhost/replica:0/task:0/device:CPU:0"](gradients_1/discriminator_d_x/conv2d_3/Conv2D_grad/ShapeN, discriminator_d_x/conv2d_3/kernel/read, gradients_1/AddN, DMT/_350, discriminator_d_x/conv2d_3/kernel/read:1, DMT/_351)]]
Caused by op 'gradients_1/discriminator_d_x/conv2d_3/Conv2D_grad/Conv2DBackpropInput', defined at:
File "E:\java\pyzo\source\pyzo\pyzokernel\start.py", line 151, in <module>
__pyzo__.run()
File "E:\java\pyzo\source\pyzo\pyzokernel\interpreter.py", line 222, in run
self.guiApp.run(self.process_commands, self.sleeptime)
File "E:\java\pyzo\source\pyzo\pyzokernel\guiintegration.py", line 85, in run
repl_callback()
File "E:\java\pyzo\source\pyzo\pyzokernel\interpreter.py", line 583, in process_commands
self._process_commands()
File "E:\java\pyzo\source\pyzo\pyzokernel\interpreter.py", line 611, in _process_commands
self.runfile(tmp)
File "E:\java\pyzo\source\pyzo\pyzokernel\interpreter.py", line 887, in runfile
self.execcode(code)
File "E:\java\pyzo\source\pyzo\pyzokernel\interpreter.py", line 950, in execcode
exec(code, self.locals)
File "C:\Users\lenovo\Desktop\library\CycleGAN\CycleGan.py", line 140, in <module>
g_train=tf.train.GradientDescentOptimizer(0.002).minimize(g_loss,var_list=g_vars)
File "c:\users\lenovo\appdata\local\programs\python\python37\lib\site-packages\tensorflow\python\training\optimizer.py", line 399, in minimize
grad_loss=grad_loss)
File "c:\users\lenovo\appdata\local\programs\python\python37\lib\site-packages\tensorflow\python\training\optimizer.py", line 511, in compute_gradients
colocate_gradients_with_ops=colocate_gradients_with_ops)
File "c:\users\lenovo\appdata\local\programs\python\python37\lib\site-packages\tensorflow\python\ops\gradients_impl.py", line 532, in gradients
gate_gradients, aggregation_method, stop_gradients)
File "c:\users\lenovo\appdata\local\programs\python\python37\lib\site-packages\tensorflow\python\ops\gradients_impl.py", line 701, in _GradientsHelper
lambda: grad_fn(op, *out_grads))
File "c:\users\lenovo\appdata\local\programs\python\python37\lib\site-packages\tensorflow\python\ops\gradients_impl.py", line 396, in _MaybeCompile
return grad_fn() # Exit early
File "c:\users\lenovo\appdata\local\programs\python\python37\lib\site-packages\tensorflow\python\ops\gradients_impl.py", line 701, in <lambda>
lambda: grad_fn(op, *out_grads))
File "c:\users\lenovo\appdata\local\programs\python\python37\lib\site-packages\tensorflow\python\ops\nn_grad.py", line 520, in _Conv2DGrad
data_format=data_format),
File "c:\users\lenovo\appdata\local\programs\python\python37\lib\site-packages\tensorflow\python\ops\gen_nn_ops.py", line 1340, in conv2d_backprop_input
dilations=dilations, name=name)
File "c:\users\lenovo\appdata\local\programs\python\python37\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 787, in _apply_op_helper
op_def=op_def)
File "c:\users\lenovo\appdata\local\programs\python\python37\lib\site-packages\tensorflow\python\framework\ops.py", line 3414, in create_op
op_def=op_def)
File "c:\users\lenovo\appdata\local\programs\python\python37\lib\site-packages\tensorflow\python\framework\ops.py", line 1740, in __init__
self._traceback = self._graph._extract_stack() # pylint: disable=protected-access
...which was originally created as op 'discriminator_d_x/conv2d_3/Conv2D', defined at:
File "E:\java\pyzo\source\pyzo\pyzokernel\start.py", line 151, in <module>
__pyzo__.run()
[elided 5 identical lines from previous traceback]
File "E:\java\pyzo\source\pyzo\pyzokernel\interpreter.py", line 950, in execcode
exec(code, self.locals)
File "C:\Users\lenovo\Desktop\library\CycleGAN\CycleGan.py", line 108, in <module>
disc_fake_x=discriminator(fake_x,'discriminator_d_x')
File "C:\Users\lenovo\Desktop\library\CycleGAN\CycleGan.py", line 97, in discriminator
layer7=tf.layers.conv2d(layer_3,1,4,1,padding='SAME')
File "c:\users\lenovo\appdata\local\programs\python\python37\lib\site-packages\tensorflow\python\layers\convolutional.py", line 427, in conv2d
return layer.apply(inputs)
File "c:\users\lenovo\appdata\local\programs\python\python37\lib\site-packages\tensorflow\python\keras\engine\base_layer.py", line 774, in apply
return self.__call__(inputs, *args, **kwargs)
File "c:\users\lenovo\appdata\local\programs\python\python37\lib\site-packages\tensorflow\python\layers\base.py", line 329, in __call__
outputs = super(Layer, self).__call__(inputs, *args, **kwargs)
File "c:\users\lenovo\appdata\local\programs\python\python37\lib\site-packages\tensorflow\python\keras\engine\base_layer.py", line 703, in __call__
outputs = self.call(inputs, *args, **kwargs)
File "c:\users\lenovo\appdata\local\programs\python\python37\lib\site-packages\tensorflow\python\keras\layers\convolutional.py", line 184, in call
outputs = self._convolution_op(inputs, self.kernel)
File "c:\users\lenovo\appdata\local\programs\python\python37\lib\site-packages\tensorflow\python\ops\nn_ops.py", line 868, in __call__
return self.conv_op(inp, filter)
File "c:\users\lenovo\appdata\local\programs\python\python37\lib\site-packages\tensorflow\python\ops\nn_ops.py", line 520, in __call__
return self.call(inp, filter)
File "c:\users\lenovo\appdata\local\programs\python\python37\lib\site-packages\tensorflow\python\ops\nn_ops.py", line 204, in __call__
name=self.name)
File "c:\users\lenovo\appdata\local\programs\python\python37\lib\site-packages\tensorflow\python\ops\gen_nn_ops.py", line 1042, in conv2d
data_format=data_format, dilations=dilations, name=name)
File "c:\users\lenovo\appdata\local\programs\python\python37\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 787, in _apply_op_helper
op_def=op_def)
InvalidArgumentError (see above for traceback): Conv2DCustomBackpropInput: input depth must be evenly divisible by filter depth
[[Node: gradients_1/discriminator_d_x/conv2d_3/Conv2D_grad/Conv2DBackpropInput = _MklConv2DBackpropInput[T=DT_FLOAT, _kernel="MklOp", data_format="NHWC", dilations=[1, 1, 1, 1], padding="SAME", strides=[1, 1, 1, 1], use_cudnn_on_gpu=true, _device="/job:localhost/replica:0/task:0/device:CPU:0"](gradients_1/discriminator_d_x/conv2d_3/Conv2D_grad/ShapeN, discriminator_d_x/conv2d_3/kernel/read, gradients_1/AddN, DMT/_350, discriminator_d_x/conv2d_3/kernel/read:1, DMT/_351)]]