gpt4 book ai didi

python - tensorflow static_rnn 错误 : input must be a sequence

转载 作者:太空宇宙 更新时间:2023-11-03 13:10:17 24 4
gpt4 key购买 nike

我正在尝试将我自己的 3D 数据提供给 LSTM。数据具有:高度 = 365,宽度 = 310,时间 = 未知/不一致,由 0 和 1 组成,产生输出的每个数据 block 被分隔到一个文件中。

import tensorflow as tf
import os
from tensorflow.contrib import rnn

filename = "C:/Kuliah/EmotionRecognition/Train1/D2N2Sur.txt"

hm_epochs = 10
n_classes = 12
n_chunk = 443
n_hidden = 500

data = tf.placeholder(tf.bool, name='data')
cat = tf.placeholder("float", [None, n_classes])

weights = {
'out': tf.Variable(tf.random_normal([n_hidden, n_classes]))
}
biases = {
'out': tf.Variable(tf.random_normal([n_classes]))
}

def RNN(x, weights, biases):
lstm_cell = rnn.BasicLSTMCell(n_hidden, forget_bias=1.0)
outputs, states = rnn.static_rnn(lstm_cell, x, dtype=tf.float32)
return tf.matmul(outputs[-1], weights['out']) + biases['out']

pred = RNN(data, weights, biases)

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred, labels=cat))
optimizer = tf.train.AdamOptimizer(learning_rate=0.001).minimize(cost)

correct_pred = tf.equal(tf.argmax(pred, 1), tf.argmax(cat, 1))
accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))

saver = tf.train.Saver()

temp = [[]]
d3 = [[]]
counter = 0
with tf.Session() as sess:
#load
#saver.restore(sess, "C:/Kuliah/EmotionRecognition/model.ckpt")
sess.run(tf.global_variables_initializer())
with open(filename) as inf:
for line in inf:
bla = list(line)
bla.pop(len(bla) - 1)
for index, item in enumerate(bla):
if (item == '0'):
bla[index] = False
else:
bla[index] = True
temp.append(bla)
counter += 1
if counter%365==0: #height 365
temp.pop(0)
d3.append(temp)
temp = [[]]
temp.pop(0)
d3.append(temp)

batch_data = d3.reshape()
sess.run(optimizer, feed_dict={data: d3, cat: 11})

acc = sess.run(accuracy, feed_dict={data: d3, cat: 11})
loss = sess.run(loss, feed_dict={data: d3, cat: 11})
print(acc)
print(loss)
#save
saver.save(sess, "C:/Kuliah/EmotionRecognition/model.ckpt")

这段代码给我一个错误:

Traceback (most recent call last):
File "C:/Kuliah/EmotionRecognition/Main", line 31, in <module>
pred = RNN(data, weights, biases)
File "C:/Kuliah/EmotionRecognition/Main", line 28, in RNN
outputs, states = rnn.static_rnn(lstm_cell, x, dtype=tf.float32)
File "C:\Users\Anonymous\AppData\Roaming\Python\Python35\site-packages\tensorflow\python\ops\rnn.py", line 1119, in static_rnn
raise TypeError("inputs must be a sequence")
TypeError: inputs must be a sequence

最佳答案

当您调用 pred = RNN(data, weights, biases) 时,data 参数应该是长度为 RNN 长度的序列。但在您的情况下,它是 data = tf.placeholder(tf.bool, name='data')

您可以尝试 pred = RNN([data], weights, biases)

查看方法的字符串文档:

inputs: A length T list of inputs, each a Tensor of shape [batch_size, input_size], or a nested tuple of such elements.

如果你的 RNN 长度未知,你应该考虑使用 tf.nn.dynamic_rnn .

关于python - tensorflow static_rnn 错误 : input must be a sequence,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45216381/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com