0
私はhereから常にtf.get_variable(...)
を使用することをお勧めしますが、ネットワークを実装しようとすると少し面倒です。例えばtf.get_variable()を正しく使用していますか?
:
def create_weights(shape, name = 'weights',\
initializer = tf.random_normal_initializer(0, 0.1)):
weights = tf.get_variable(name, shape, initializer = initializer)
print("weights created named: {}".format(weights.name))
return(weights)
def LeNet(in_units, keep_prob):
# define the network
with tf.variable_scope("conv1"):
conv1 = conv(in_units, create_weights([5, 5, 3, 32]), create_bias([32]))
pool1 = maxpool(conv1)
with tf.variable_scope("conv2"):
conv2 = conv(pool1, create_weights([5, 5, 32, 64]), create_bias([64]))
pool2 = maxpool(conv2)
# reshape the network to feed it into the fully connected layers
with tf.variable_scope("flatten"):
flatten = tf.reshape(pool2, [-1, 1600])
flatten = dropout(flatten, keep_prob)
with tf.variable_scope("fc1"):
fc1 = fc(flatten, create_weights([1600, 120]), biases = create_bias([120]))
fc1 = dropout(fc1, keep_prob)
with tf.variable_scope("fc2"):
fc2 = fc(fc1, create_weights([120, 84]), biases = create_bias([84]))
with tf.variable_scope("logits"):
logits = fc(fc2, create_weights([84, 43]), biases = create_bias([43]))
return(logits)
私が代わりに[5, 5, 3, 32]
の[7, 7, 3, 32]
にconv1
変数の重みを変更したい場合、私は再起動しなければならない、私はcreate_weights
を呼び出し、さらに、言う一つ一つの時間をwith tf_variable_scope(...)
を使用する必要があります変数としてのカーネルはすでに存在します。一方、tf.Variable(...)
を使用すると、これらの問題は発生しません。
私はtf.variable_scope(...)
を間違って使用していますか?