मैं tf.layers.dense . का उपयोग करके समान आर्किटेक्चर और बिल्कुल समान वज़न के साथ दो मॉडल बनाना चाहता हूं

m1 = tf.layers.dense(input, units=10, activation='relu', name='m1')
m2 = tf.layers.dense(input, units=10, activation='relu', name='m2')

मैं m2 वज़न और बायस को m1 के समान कैसे सेट कर सकता हूँ? (समान मान, साझा भार नहीं, इसलिए प्रशिक्षण के दौरान m1, m2 भार नहीं बदलेगा और इसके विपरीत)

0
ian 19 पद 2018, 21:44

2 जवाब

सबसे बढ़िया उत्तर

आपको सबसे पहले वज़न और पूर्वाग्रह प्रारंभकर्ता बनाना चाहिए:

import tensorflow as tf
tf.enable_eager_execution()

init_kernel = tf.constant_initializer([[1,2,3],[4,5,6]])
init_bias = tf.constant_initializer([7,8,9])

फिर आप दो सघन परतें बना सकते हैं और एक ही इनिशियलाइज़र को kernel_initializer और bias_initializer में पास कर सकते हैं।

layer1 = tf.layers.dense(inputs=inputs, units=3, kernel_initializer=init_kernel, bias_initializer=init_bias)
layer2 = tf.layers.dense(inputs=inputs, units=3, kernel_initializer=init_kernel, bias_initializer=init_bias)

अगर मैं आपके प्रश्न को सही ढंग से समझता हूं तो आपको यही चाहिए।

1
gorjan 20 पद 2018, 01:59

गोरजन उत्तर सही है, लेकिन मुझे एक और समाधान भी मिला जो अधिक जटिल परिदृश्यों में उपयोग करना आसान हो सकता है:

with tf.Session() as sess:
    with tf.variable_scope("m1", reuse=True):
        weights_m1 = sess.run(tf.get_variable("kernel"))

    with tf.variable_scope("m2", reuse=True):
        sess.run(tf.get_variable("kernel").assign(weights_m1))
        weights_m2 = sess.run(tf.get_variable("kernel"))       

print(np.array_equal(weights_m1, weights_m2)  # True 
0
ian 20 पद 2018, 02:20