我試圖適應Tensorflow r0.12碼(從https://github.com/ZZUTK/Face-Aging-CAAE)到1.2.1版本,我有優化的問題.minimize()Tensorflow:optimizer.minimize() - 「ValueError異常:形狀必須是等級0,但1級
在這種情況下,我使用GradientDescent,但下面的錯誤消息是僅稍微不同(在提供形狀方面)當我嘗試不同的優化:
ValueError: Shape must be rank 0 but is rank 1 for 'GradientDescent/update_E_con
v0/w/ApplyGradientDescent' (op: 'ApplyGradientDescent')
with input shapes: [5,5,1,64], [1], [5,5,1,64].
其中[5 ,5]是我的內核大小,1是初始信道的數量和64是在第一卷積濾波器的數量,這是卷積編碼器網絡它指的是:
E_conv0: (100, 128, 128, 64)
E_conv1: (100, 64, 64, 128)
E_conv2: (100, 32, 32, 256)
E_conv3: (100, 16, 16, 512)
E_conv4: (100, 8, 8, 1024)
E_conv5: (100, 4, 4, 2048)
...
這就是會引發錯誤代碼:
self.EG_optimizer = tf.train.GradientDescentOptimizer(
learning_rate=EG_learning_rate,
beta1=beta1
).minimize(
loss=self.loss_EG,
global_step=self.EG_global_step,
var_list=self.E_variables + self.G_variables
)
其中:
EG_learning_rate = tf.train.exponential_decay(
learning_rate=learning_rate,
global_step=self.EG_global_step,
decay_steps=size_data/self.size_batch * 2,
decay_rate=decay_rate,
staircase=True
)
self.EG_global_step = tf.get_variable(name='global_step',shape=1, initializer=tf.constant_initializer(0), trainable=False)
而且
self.E_variables = [var for var in trainable_variables if 'E_' in var.name]
self.G_variables = [var for var in trainable_variables if 'G_' in var.name]
self.loss_EG = tf.reduce_mean(tf.abs(self.input_image - self.G))
一些調試後,我相信現在的問題來自minimize()方法。錯誤似乎是歸因於最後一個參數(var_list),但是當我嘗試註釋掉第二個或第三個參數,誤差保持不變,只是歸因於第一個參數(損失)。
我改變了目前在GitHub上的代碼以適應新版本,所以我在tf.variable_scope(tf.get_variable_scope(),reuse = True)上做了很多工作。這可能是原因嗎?
非常感謝你提前!
你試過https://www.tensorflow.org/install/migration升級你的代碼? – gdelab