トレーニング可能な変数のリストから変数を削除するには、最初に次の方法でコレクションにアクセスできます。
trainable_collection = tf.get_collection_ref(tf.GraphKeys.TRAINABLE_VARIABLES)
そこにtrainable_collection
は、トレーニング可能な変数のコレクションへの参照が含まれています。たとえば、このリストから要素をポップtrainable_collection.pop(0)
すると、対応する変数がトレーニング可能な変数から削除されるため、この変数はトレーニングされません。
これは で機能しますが、正しい引数でpop
正しく使用する方法を見つけるのにまだ苦労しているためremove
、変数のインデックスには依存しません。
編集:グラフ内の変数の名前がわかっている場合 (グラフの protobuf を検査するか、Tensorboard を使用してより簡単に取得できます)、それを使用してトレーニング可能な変数のリストをループし、次にトレーニング可能なコレクションからの変数。例: 名前付きの変数をトレーニングしたくないが、それらは既にコレクションに追加されている"batch_normalization/gamma:0"
とし"batch_normalization/beta:0"
ますTRAINABLE_VARIABLES
。私にできることは次のとおりです。
#gets a reference to the list containing the trainable variables
trainable_collection = tf.get_collection_ref(tf.GraphKeys.TRAINABLE_VARIABLES)
variables_to_remove = list()
for vari in trainable_collection:
#uses the attribute 'name' of the variable
if vari.name=="batch_normalization/gamma:0" or vari.name=="batch_normalization/beta:0":
variables_to_remove.append(vari)
for rem in variables_to_remove:
trainable_collection.remove(rem)
` これにより、コレクションから 2 つの変数が正常に削除され、それらはそれ以上トレーニングされなくなります。