そのため、フィード変数に問題があります。エポックにわたってモデルの重みとバイアスをフリーズしたい。次の変数があります。
wc1 = tf.Variable(tf.random_normal([f1, f1, _channel, n1], mean=0, stddev=0.01), name="wc1")
wc2 = tf.Variable(tf.random_normal([f2, f2, n1, n2], mean=0, stddev=0.01), name="wc2")
wc3 = tf.Variable(tf.random_normal([f3, f3, n2, _channel], mean=0, stddev=0.01), name="wc3")
bc1 = tf.Variable(tf.random_normal(shape=[n1], mean=0, stddev=0.01), name="bc1")
bc2 = tf.Variable(tf.random_normal(shape=[n2], mean=0, stddev=0.01), name="bc2")
bc3 = tf.Variable(tf.random_normal(shape=[_channel], mean=0, stddev=0.01), name="bc3")
たとえば、最初の 10 エポックで [wc1, bc1] をトレーニングし、次のエポックで [wc2, bc2] などをトレーニングします。この目的のために、変数コレクションを作成しました。
tf.add_to_collection('wc1', wc1)
tf.add_to_collection('wc1', bc1)
tf.add_to_collection('wc2', wc2)
tf.add_to_collection('wc2', bc2)
コレクション名のプレースホルダーを作成します。
trainable_name = tf.placeholder(tf.string, shape=[])
次に、オプティマイザーで取得してみます。
opt = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)
train_op = opt.minimize(cost, var_list=tf.get_collection(trainable_name))
フィード データ:
sess.run(train_op, feed_dict={ ... , trainable_name: "wc1"})
そして、私はエラーが発生します:
Traceback (most recent call last):
File "/home/keeper121/PycharmProjects/super/sp_train.py", line 292, in <module>
train(tiles_names, "model.ckpt")
File "/home/keeper121/PycharmProjects/super/sp_train.py", line 123, in train
train_op = opt.minimize(cost, var_list=tf.get_collection(trainable_name))
File "/home/keeper121/anaconda/envs/tensorflow/lib/python2.7/site-packages/tensorflow/python/training/optimizer.py", line 193, in minimize
grad_loss=grad_loss)
File "/home/keeper121/anaconda/envs/tensorflow/lib/python2.7/site-packages/tensorflow/python/training/optimizer.py", line 244, in compute_gradients
raise ValueError("No variables to optimize")
ValueError: No variables to optimize
では、セッション中にトレーニング変数を変更する方法はありますか?
ありがとう。