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抱歉,你说得很对。我已更新了问题。