首页 > 解决方案 > 在 tf.session() 中更改张量的值

问题描述

我建立了一个神经网络模型,我想在 tensorflow 的会话中更改某个张量的值。

例如,如果我们忽略要简化的模型,但我们要优化这个张量:

# construct an optimizer
train_op = tf.train.AdamOptimizer(learning_rate=0.05).minimize(cost)  

在我可以在会话中运行我的模型来训练它之后。

但我想打开一个会话并更改张量 train_op 的值,例如我有这个:

with tf.Session() as sess: 
    #initialize all variables
    tf.initialize_all_variables().run()

    for i in range(iteraciones):
    #Prepare input(minibach) to feed model
        input_ = trainCluster0[0:len(train)]
        # train model
        sess.run(train_op, feed_dict={X: input_})
        print(i, sess.run(cost, feed_dict={X: train}))
        #Save model in last epoch
        if(i == iteraciones-1):
            save_path = saver.save(sess, "/tmp/model.ckpt")
            print("Model saved.")

我想要这样的东西:

with tf.Session() as sess: 
    #initialize all variables
    tf.initialize_all_variables().run()

    #Change value of tensor train_op
    # train_op = tf.train.AdamOptimizer(learning_rate=value).minimize(cost)
    ...
    ...

    for i in range(iteraciones):
        #Prepare input(minibach) to feed model
        input_ = trainCluster0[0:len(train)]
        # train model
        sess.run(train_op, feed_dict={X: input_})
        print(i, sess.run(cost, feed_dict={X: train}))
        #Save last epoch and test
        if(i == iteraciones-1):
            save_path = saver.save(sess, "/tmp/model.ckpt")
            print("Model saved.")

我怎样才能做到这一点?即重用具有不同优化参数的模型。

提前致谢。

标签: pythontensorflow

解决方案


已解决:感谢@jdehesa

解决方案是将此占位符添加到模型中:

#Tensor placeholder to parametizer learning rate of optimizer
learning = tf.placeholder("float", name='learning')

# construct an optimizer
train_op = tf.train.AdamOptimizer(learning).minimize(cost)

这对于 sess.run:

with tf.Session() as sess:
    # we need to initialize all variables
    tf.initialize_all_variables().run()
    RATIO = 0.001
    ITERATIONS = 1000

    for i in range(ITERATIONS):
        #Prepare input(minibach) from feed autoencoder     
        input_ = trainCluster0[0:len(trainCluster0)]
        # train autoencoder
        sess.run(train_op, feed_dict={X: input_, learning: RATIO})
        print(i, sess.run(cost, feed_dict={X: input_}))
        #Save last epoch and test
        if(i == ITERATIONS-1):
            save_path = saver.save(sess, "/tmp/modelCluster0.ckpt")
            print("Model saved.")

推荐阅读