Python TensorFlow和单词嵌入-类型错误:不可损坏类型:';numpy.ndarray和#x27;

Python TensorFlow和单词嵌入-类型错误:不可损坏类型:';numpy.ndarray和#x27;,python,numpy,tensorflow,Python,Numpy,Tensorflow,我希望修改关于预测下一个单词的代码,使其具有预测问题答案的代码 下面是我遇到问题的代码摘录: import tensorflow.contrib as ct def NHIDDEN(): return 1 g = tf.Graph() tf.reset_default_graph() with g.as_default(): # lines 97-104 of original code # RNN output node weights and biases

我希望修改关于预测下一个单词的代码,使其具有预测问题答案的代码

下面是我遇到问题的代码摘录:

import tensorflow.contrib as ct

def NHIDDEN():
    return 1

g = tf.Graph()
tf.reset_default_graph()

with g.as_default():
    # lines 97-104 of original code
    # RNN output node weights and biases
    weights = { 'out': tf.Variable(tf.random_normal([NHIDDEN(), embedding_dim])) }
    biases = { 'out': tf.Variable(tf.random_normal([embedding_dim])) }

    with tf.name_scope("embedding"):
        W = tf.Variable(tf.constant(0.0, shape=[vocab_size, embedding_dim]),
                    trainable=False, name="W")
        embedding_placeholder = tf.placeholder(tf.float32, [vocab_size, embedding_dim])
        embedding_init = W.assign(embedding_placeholder)
        preimage = tf.nn.embedding_lookup(W, x2)

    # lines 107-119 of original
    # reshape input data
    x_unstack = tf.unstack(preimage)

    # create RNN cells
    rnn_cell = ct.rnn.MultiRNNCell([ct.rnn.BasicLSTMCell(NHIDDEN()), ct.rnn.BasicLSTMCell(NHIDDEN())])
    outputs, states = ct.rnn.static_rnn(rnn_cell, x_unstack, dtype=tf.float32)

    # capture only the last output
    pred = tf.matmul(outputs[-1], weights['out']) + biases['out'] 

    # Create loss function and optimizer
    cost = tf.reduce_mean(tf.nn.l2_loss(pred-y))
    optimizer = tf.train.AdamOptimizer(learning_rate=0.001).minimize(cost)

    # lines 130, 134 and 135 of original
    step = 0
    acc_total = 0
    loss_total = 0

    with tf.Session(graph = g) as sess:
        # lines 138, 160, 162, 175, 178 and 182 of original
        while step < 1: # training_iters:
            _,loss, pred_ = sess.run([optimizer, cost, pred], feed_dict =
                                 {x: tf.nn.embedding_lookup(W, x2), y: tf.nn.embedding_lookup(W, y)})
            loss_total += loss
            print("loss = " + "{:.6f}".format(loss_total))
            step += 1
        print ("Finished Optimization")
导入tensorflow.contrib作为ct
def NHIDDEN():
返回1
g=tf.Graph()
tf.reset_default_graph()
使用g.as_default():
#原代码第97-104行
#RNN输出节点权重和偏差
权重={'out':tf.Variable(tf.random_normal([NHIDDEN(),embedded_dim]))
偏差={'out':tf.Variable(tf.random_normal([embedding_dim]))
使用tf.name_范围(“嵌入”):
W=tf.Variable(tf.constant(0.0,shape=[vocab\u size,embedded\u dim]),表示,
可培训=False,name=“W”)
嵌入占位符=tf.placeholder(tf.float32,[vocab\u大小,嵌入尺寸])
嵌入\u init=W.assign(嵌入\u占位符)
preimage=tf.nn.embedding\u查找(W,x2)
#原文第107-119行
#重塑输入数据
x_unstack=tf.unstack(前图像)
#创建RNN单元
rnn_cell=ct.rnn.multirncell([ct.rnn.BasicLSTMCell(NHIDDEN()),ct.rnn.BasicLSTMCell(NHIDDEN())]))
输出,状态=ct.rnn.static\u rnn(rnn\u单元格,x\u取消堆栈,数据类型=tf.float32)
#仅捕获最后的输出
pred=tf.matmul(输出[-1],权重['out'])+偏差['out']
#创建损失函数和优化器
成本=tf.减少平均值(tf.nn.l2.损失(pred-y))
优化器=tf.train.AdamOptimizer(学习率=0.001)。最小化(成本)
#原文第130、134和135行
步长=0
acc_总计=0
总损失=0
将tf.Session(graph=g)作为sess:
#原文第138、160、162、175、178和182行
而步骤<1:#培训#投标人:
_,损失,预测=sess.run([optimizer,cost,pred],feed\u dict=
{x:tf.nn.嵌入查找(W,x2),y:tf.nn.嵌入查找(W,y)})
损失总额+=损失
打印(“损失=”+“{.6f}”。格式(损失总额))
步骤+=1
打印(“完成优化”)
我得到的错误是:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-7-7a72d8d4f100> in <module>()
     42         while step < 1: # training_iters:
     43             _,loss, pred_ = sess.run([optimizer, cost, pred], feed_dict =
---> 44                                      {x: tf.nn.embedding_lookup(W, x2), y: tf.nn.embedding_lookup(W, y)})
     45             loss_total += loss
     46             print("loss = " + "{:.6f}".format(loss_total))

TypeError: unhashable type: 'numpy.ndarray'
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
42当步骤<1:培训时:
43 uu,损失,预测=sess.run([optimizer,cost,pred],feed\u dict=
--->44{x:tf.nn.嵌入查找(W,x2),y:tf.nn.嵌入查找(W,y)})
45损失_总计+=损失
46打印(“损失=”+“{.6f}”。格式(损失总额))
TypeError:不可损坏的类型:“numpy.ndarray”
如何修复代码?是因为
取消堆叠
ing吗


附加上下文:
x2
y
被分配
np.array(list(vocab\u processor.transform([s]))
的返回值,其中
s
是一个字符串(通过传递不同的字符串)<代码>嵌入dim、
语音大小
W
使用处的代码进行计算。

问题出现在这里:
y:tf.nn.嵌入查找(W,y)
feed\u dict
键应该是TensorFlow图中的占位符。假设
y
是一个包含目标值的
numpy.ndarray
,您可以定义一个
y
将目标值馈送到网络中,将
feed\u dict
的相应条目更改为
y:tf.nn。嵌入查找(W,y)
,并相应地修改其他张量(即,使用张量
y\uu
计算损失)。

始终显示错误消息的完整回溯,否则很难理解错误消息的来源。@JohnZwinck抱歉,你说得很对。我已更新了问题。