2017-03-16 10 views
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(...)を間違って使用していますか?

答えて

0

これは、変数スコープ内に既に存在するものを変更できないように見えるため、カーネルを再起動したときにのみ、以前定義した変数を変更することができます(実際には、削除された)

...唯一の私の推測です

誰かが詳細な答えを与えることができれば...私はそれを感謝します。

関連する問題