1

私は、適応学習率とAdamグラジエントベースの最適化を使用して畳み込みニューラルネットを実装しようとしています。セッションを実行するため固定スケジュールの適応学習率

# learning rate schedule 
schedule = np.array([0.0005, 0.0005, 
     0.0002, 0.0002, 0.0002, 
     0.0001, 0.0001, 0.0001, 
     0.00005, 0.00005, 0.00005, 0.00005, 
     0.00001, 0.00001, 0.00001, 0.00001, 0.00001, 0.00001, 0.00001, 0.00001]) 

# define placeholder for variable learning rate 
learning_rates = tf.placeholder(tf.float32, (None),name='learning_rate') 

# training operation 
cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits=logits, 
labels=one_hot_y) 
loss_operation = tf.reduce_mean(cross_entropy) 
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rates) 
training_operation = optimizer.minimize(loss_operation) 

コード:私は、次のコードを持っている

. 
. 
. 
_, loss = sess.run([training_operation, loss_operation], 
       feed_dict={x: batch_x, y: batch_y, learning_rate: schedule[i]}) 
. 
. 
. 

私はそれが技術的にスケジュールの最初の値を使用する必要がありますので、0に初期化されたエポック数を表します。

私はこれを実行しようとするたびに、私は次のエラーを取得する:

InvalidArgumentError:あなたはDTYPEフロート [[ノードでのプレースホルダテンソル 'learning_rate_2' の値養う必要があります。learning_rate_2 = Placeholderdtype = DT_FLOAT、形状を= [ ]、_device = "/ job:localhost/replica:0/task:0/cpu:0"]]

誰も同じ問題がありましたか?私はセッションを再初期化しようとしましたが、変数の名前を変更しましたが役に立たなかった。

+0

これを試して、セッション内でスケジュールを定義してください –

+0

こんにちはアリ、どちらもうまくいきませんでしたが、別の場所を見つけました。 learning_ratesプレースホルダを削除し、オプティマイザ変数をトレーニングループにコピーしました。非常に優雅ではないが、それは動作します。 – stevensallright

答えて

0

中間体溶液を見出した。

. 
. 
. 
for i in range(EPOCHS): 
    XX_train, yy_train = shuffle(X_train, y_train) 

    # code for adaptive rate 
    optimizer = tf.train.AdamOptimizer(learning_rate = schedule[i]) 

    for offset in range(0, num_examples, BATCH_SIZE): 
     end = offset + BATCH_SIZE 
     batch_x, batch_y = XX_train[offset:end], yy_train[offset:end] 
     _, loss = sess.run([training_operation, loss_operation], feed_dict={x: batch_x, y: batch_y}) 
. 
. 
. 

非常に優雅ですが、少なくとも動作します。

関連する問題