Tensorflow:无法将字符串传递到占位符张量

时间:2018-06-28 16:35:30

标签: python tensorflow cosine-similarity

我正在编写一个函数,使用Google的universal sentence encoder比较两个字符串的相似性。按照here提供的笔记本中的说明,我在班上有以下方法,该方法将两个句子作为输入并打印它们之间的相似性。

void f(atype a={/*.../*})

作为参考,self.embed属性如下所示:

protocol Tester {
    func printTest()
    }

extension Tester {
    func printTest() {
        print("XXXXTestXXXX")
    }
}

class TestController: UIViewController, Tester {

 let testing = Tester()// error here

    override func viewDidLoad() {
        super.viewDidLoad()

        testing.printTest()
    }

}

当我调用函数时:

def tf_sim(self, text1, text2):
    # Reduce logging output.
    tf.logging.set_verbosity(tf.logging.ERROR)

    sim_input1 = tf.placeholder(tf.string, shape=(None), name="sim_input1")
    sim_input2 = tf.placeholder(tf.string, shape=(None), name="sim_input2")

    embedding1 = self.embed([sim_input1])
    embedding2 = self.embed([sim_input2])

    encode1 = tf.nn.l2_normalize(embedding1, axis=1)
    encode2 = tf.nn.l2_normalize(embedding2, axis=1)
    sim_scores = -tf.acos(tf.reduce_sum(tf.multiply(encode1, encode2), axis=1))

    init_vars = tf.global_variables_initializer()
    init_tables = tf.tables_initializer()

    with tf.Session() as sess:
        sess.run([init_vars, init_tables])
        sess.run(sim_scores, feed_dict={sim_input1: text1, sim_input2: text2})
        print (sim_scores.eval())

我得到以下堆栈跟踪:

self.embed = hub.Module("https://tfhub.dev/google/universal-sentence-encoder/2")

基本上告诉我,即使看起来像我正在做的那样,我也需要向占位符提供一个字符串。有什么我想念的吗?任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

sim_scores.eval()

等效于:

sess.run(sim_scores, feed_dict={})

因此tensorflow(理所当然)抱怨您没有喂sim_input1(或sim_input2

相反,应存储sess.run()调用的结果并打印出来,或者将feed_dict参数赋予eval()调用。

答案 1 :(得分:1)

正如f4所说,您已经评估了sim_scores的值。您只需要存储和打印它即可:

with tf.Session() as sess:
    sess.run([init_vars, init_tables])
    evaluated_sim_scores = sess.run(sim_scores, feed_dict={sim_input1: text1, sim_input2: text2})
    print (evaluated_sim_scores)

注意:请勿使用相同的名称来存储sim_scores