初始化并使用tf.placeholder(tf.string),为其提供值并在必要时将其转换回字符串

时间:2018-03-22 20:09:03

标签: python tensorflow neural-network deep-learning

我在tensorflow中实现模型时遇到问题。 我想编制一个预测情绪极性的模型。要做到这一点,我首先要训练模型。这是发生错误的地方。

我使用三个变量:句子(或情绪),目标(极性适用的句子中的单词)和极性本身。前两个变量是字符串,极性是向量(正数时为[1,0,0],负数时为[0,0,1]。)

要创建这些变量,我使用tf.placeholder(tf.string)。当我运行模型时,我收到以下错误:"您必须为占位符张量提供一个值' Placeholder_1'使用dtype string"

当我想对句子变量进行操作时,我也认为我有一个问题:我需要在句子中拆分句子,但由于句子是占位符,我首先必须将其转换回字符串。

模型的输入是三个向量:sVec(所有句子的矢量作为字符串),tVec(所有目标的矢量作为字符串)和pVec(所有极性的矢量作为矢量)

我一直在处理这个错误很长一段时间,所以任何帮助都表示赞赏。您可以在下面找到代码。提前致谢。

polarity = tf.placeholder(tf.float32, shape=[1, c_cardi])#label
sentence = tf.placeholder(tf.string)  #inputdata
target = tf.placeholder(tf.string)

def multilayer_perceptron(mi, target, weights, biases):
    # This method works correctly


def modelA(sentence, target):
    # The error might refer to this:
    sess2 = tf.Session()
    sentence = sess2.run(sentence) # I need to get the value of the tensor here
    sess2.close()
    words = sentence.split()
    # Code goes on, no error here
    return prediction


def trainModelA(sVec, tVec, pVec):
    prediction = modelA(sentence, target)
    cost_function = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction, labels=polarity))
    optimizer = tf.train.GradientDescentOptimizer(0.01).minimize(cost_function)

    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        for epoch in range(epochs):
            # The error might refer to this part
            sess.run(optimizer, feed_dict={sentence:sVec, target: tVec, polarity:pVec})
            # Code goes on

trainModelA(sVec, tVec, pVec)

编辑:

在我看来,错误发生在这一行:sentence = sess2.run(句子)。因为我运行modelA(句子,目标),所以我将句子作为输入,但是还没有填充值。然而,这似乎是要走的路,所以我仍然不知道发生了什么。

0 个答案:

没有答案