मैं निम्नलिखित करना चाहूंगा:

  • ए) मॉडल ग्राफ को परिभाषित करें
  • बी) मॉडल शुरू करें और इसे बहुत सीमित NUMBER_OF_PRE_ITERATIONS (मान लें, NUMBER_OF_PRE_ITERATIONS=20) के लिए प्रशिक्षित करें। मॉडल सहेजें।
  • c) रिपीट पॉइंट b) NUMBER_OF_PRE_RUNS बार (जैसे NUMBER_OF_PRE_RUNS=3)। हर बार, यदि कोई "नया" मॉडल "सहेजे गए" मॉडल की तुलना में बेहतर परिणाम देता है, तो "नया" मॉडल सहेजा जाता है।

सी के परिणामस्वरूप), मेरे पास NUMBER_OF_PRE_RUNS मॉडल में से (शायद) सर्वोत्तम प्रारंभिक मान वाला मॉडल होना चाहिए।

  • डी) "सहेजे गए" (शायद) सर्वश्रेष्ठ मॉडल आयात करें और प्रशिक्षण के साथ आगे बढ़ें।

समस्या: हर बार, आयातित मॉडल के सभी ऑप्स का परिणाम "कोई नहीं" मान होता है। इनपुट आंकड़े मान्य लगते हैं, कर्नेल और पूर्वाग्रह पैरामीटर भी। वहां कोई "कोई नहीं" या कोई अन्य संदिग्ध आंकड़े नहीं हैं, बस संख्याएं तैरती हैं। तो हर ऑप के परिणामस्वरूप "कोई नहीं" क्यों?

यहाँ (सरलीकृत) कोड है:

# imports
# declarations of variables etc.

tf.reset_default_graph()

with tf.variable_scope(name_or_scope='Model_', reuse=tf.AUTO_REUSE):
    x = tf.placeholder(...)
    y = tf.placeholder(...)
    input_layer = tf.layers.dense(...)
    inter_layer = tf.layers.dense(...)
    output_layer = tf.layers.dense(...)

    loss_funct = tf.reduce_mean(tf.abs(y - output_layer), name='loss_f')
    optimit = tf.train.GradientDescentOptimizer(learning_rate=LEARNING_RATE, name='optimit')
    train = optimit.minimize(loss=loss_funct, name='train')


saver = tf.train.Saver()

best_pre_result = 99999
for pre_run in range(NUMBER_OF_PRE_RUNS):
    with tf.Session() as presess:

        presess.run(tf.global_variables_initializer())

        for pre_iteration in range(NUMBER_OF_PRE_ITERATIONS):
            for batch in range(NUMBER_OF_BATCHES):
                x_batch, y_batch = get_batches(...)
                presess.run(train, feed_dict={x: x_batch, y: y_batch})
            if pre_iteration % 10 == 0:
                # Monitor performance here. Training seems to progress in valid way.
            if pre_iteration == NUMBER_OF_PRE_ITERATIONS - 1:
                pre_result = presess.run(loss_funct, feed_dict={x: all_features, y: all_targets})
                if pre_result < best_pre_result:
                    best_pre_result = pre_result
                    model_path = saver.save(sess=presess, save_path=SAVE_MODEL_PATH)

# tried without the below line, but result was the same.
tf.reset_default_graph()

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())        

    restorer = tf.train.import_meta_graph(SAVE_MODEL_PATH + ".meta")
    restorer.restore(sess=sess, save_path=model_path)

    x_ = tf.get_default_graph().get_tensor_by_name(name='Model_/x:0')
    y_ = tf.get_default_graph().get_tensor_by_name(name='Model_/y:0')
    compute_input_ = tf.get_default_graph().get_operation_by_name(name='Model_/input_layer/Tanh')
    # otehr operations & tensors imported here for performance monitoring
    loss_funct_ = tf.get_default_graph().get_operation_by_name(name='Model_/loss_f')
    train_ = tf.get_default_graph().get_operation_by_name(name='Model_/train')

    for iteration in range(...):
        for batch in range(...):
            x_batch, y_batch = get_batches(...)
            sess.run(train_, feed_dict={x_: x_batch, y_: y_batch})
            # Monitor performance here. All ops result in "None".
0
Broono 24 अक्टूबर 2018, 13:28

1 उत्तर

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

आपको किस टेंसर से कोई नहीं मिलता है? यदि आपको loss_funct से कोई नहीं मिलता है, तो यही कारण है कि आपने loss_funct के लिए get_operation_by_name का उपयोग किया है। किसी ऑपरेशन का परिणाम प्राप्त करने के लिए हमें get_tensor_by_name का उपयोग करना चाहिए।

निम्नलिखित कोड में, अंतिम पंक्ति कोई नहीं दिखाती है।

with tf.variable_scope("model"):
    x = tf.get_variable(name="x", shape=[3], initializer=tf.initializers.random_normal())
    y = tf.reduce_sum(x, name="y")

saver = tf.train.Saver()
save_path = "./saver"
pre_max = -10000

for i in range(3):
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        cur_y = sess.run(y)
        print(cur_y)

        if cur_y > pre_max:
            pre_max = cur_y
            model_path = saver.save(sess=sess, save_path=save_path)

print("max_y : ", pre_max)
tf.reset_default_graph()

with tf.Session() as sess:
    restorerer = tf.train.import_meta_graph(save_path + ".meta")
    restorerer.restore(sess, save_path)

    y_tensor = tf.get_default_graph().get_tensor_by_name(name='model/y:0')
    y_op = tf.get_default_graph().get_operation_by_name(name='model/y')

    print(sess.run(y_tensor))
    print(sess.run(y_op))
1
saket 24 अक्टूबर 2018, 12:34