Slot_names
是優化具體。如果您想獲得每個可訓練變量的插槽,您可以使用get_slot
方法並使用正確的slot_name
。爲momentum_optimizer
創建的插槽名稱(默認情況下)爲momentum
。以下是一個簡單的例子來說明這些觀點。
x_input = np.linspace(0, 30, 200)
y_input = 4 * x_input + 6
W = tf.Variable(0.0, name="weight")
b = tf.Variable(0.0, name="bias")
X = tf.placeholder(tf.float32, name='InputX')
Y = tf.placeholder(tf.float32, name='InputY')
Y_pred = X * W + b
loss = tf.reduce_mean(tf.square(Y_pred - Y))
# define the optimizer
optimizer = tf.train.MomentumOptimizer(learning_rate=0.001, momentum=.9)
# training op
train_op = optimizer.minimize(loss)
# print the optimizer slot name
print(optimizer.get_slot_names())
# Results:['momentum']
# print out slot created for each trainable variables using the slot_name from above result
for v in tf.trainable_variables():
print(optimizer.get_slot(v, 'momentum'))
# Results: <tf.Variable 'weight/Momentum:0' shape=() dtype=float32_ref>
<tf.Variable 'bias/Momentum:0' shape=() dtype=float32_ref>
感謝您的回覆。那麼,你的意思是它只能恢復勢頭嗎?由於它在[https://www.tensorflow.org/versions/r1.3/api_docs/python/tf/train/MomentumOptimizer]中提到,我認爲它也可以在勢頭公式中返回'累積'變量。 –
這只是TF中不連貫命名的一個例子。 「動量」槽參數實際上是從公式中「積累」的,而來自公式的「動量」僅僅是一個浮點數,超參數,存儲在opt._momentum中。 – lejlot
@AliAsgharMortazi正如我在這個答案中提到的,你可以使用'get_slot'來獲得累積的變量和值。看我的例子。 –