python - Tensorflow:成本张量列表

标签 python list machine-learning tensorflow

我正在尝试在 Tensor Flow 中使用 LSTM。我在网上找到了一个教程,其中输入了一组序列,目标函数由 LSTM 的最后一个输出和已知值组成。但是,我想让我的目标函数使用来自每个输出的信息。具体来说,我试图让 LSTM 学习序列集(即学习句子中单词中的所有字母)。:

cell = rnn_cell.BasicLSTMCell(num_units)
inputs = [tf.placeholder(tf.float32,shape=[batch_size,input_size]) for _ in range(seq_len)]
result = [tf.placeholder(tf.float32, shape=[batch_size,input_size]) for _ in range(seq_len)]

W_o = tf.Variable(tf.random_normal([num_units,input_size], stddev=0.01))     
b_o = tf.Variable(tf.random_normal([input_size], stddev=0.01))

outputs, states = rnn.rnn(cell, inputs, dtype=tf.float32)   

losses = []

for i in xrange(len(outputs)):
    final_transformed_val = tf.matmul(outputs[i],W_o) + b_o
    losses.append(tf.nn.softmax(final_transformed_val))

cost = tf.reduce_mean(losses) 

这样做会导致错误:

TypeError: List of Tensors when single Tensor expected

我该如何解决这个问题? tf.reduce_mean() 接受张量值列表,还是有一些特殊的张量对象接受它们?

最佳答案

在您的代码中,losses 是一个 Python 列表。 TensorFlow 的 reduce_mean()需要一个张量,而不是一个 Python 列表。

losses = tf.reshape(tf.concat(1, losses), [-1, size])

其中 size 是您要采用 softmax 的值的数量,应该可以满足您的需求。参见 concat()

但是,我在您的代码中注意到一件事似乎有点奇怪,即您有一个输入占位符列表,而 the TensorFlow Tutorial 中的代码使用 3 阶张量作为输入。您的输入是 2 阶张量的列表。我建议查看教程中的代码,因为它几乎完全符合您的要求。

该教程中的主要文件之一是 here .特别是,第 139 行是他们创建成本的地方。 关于您的输入,第 90 和 91 行是设置输入和目标占位符的位置。这两行的主要内容是整个序列在单个占位符而不是占位符列表中传递。

请参阅 ptb_word_lm.py 文件中的第 120 行,了解它们在何处进行串联。

关于python - Tensorflow:成本张量列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34570177/

相关文章:

java - 将 Map<String, Object> 转换为 Map<String, List<Object>>

machine-learning - 如何使用 StyleGan?

tensorflow - 如何可视化(并理解)转置卷积?

python - Scikit-Learn的SVM类中的nu参数是什么意思?

python - 将记录收集到 Eve/mongodb 中的单个数组中以减少带宽

python - 升级到 Airflow 1.10 - _mysql_exceptions.OperationalError : (1054, "Unknown column ' task_instance.executor_config' in 'field list' ")

machine-learning - : order of oversampling vs. 缩放特征不平衡?

python - 简化 Python 迭代

c# - 如何在 C# 中对模板使用 new 运算符

list - 查找列表中的重复项