我正在尝试使用 Tensorflow(r0.10,python 3.5)在玩具分类问题上训练循环神经网络,但我得到的结果令人困惑。
我想将 0 和 1 的序列输入到 RNN 中,并将序列中给定元素的目标类作为序列的当前值和先前值表示的数字,并将其视为二进制数。例如:
input sequence: [0, 0, 1, 0, 1, 1]
binary digits : [-, [0,0], [0,1], [1,0], [0,1], [1,1]]
target class : [-, 0, 1, 2, 1, 3]
Run Code Online (Sandbox Code Playgroud)
看起来这是 RNN 应该能够很容易学习的东西,但我的模型只能区分类 [0,2] 和 [1,3]。换句话说,它能够区分当前数字为 0 的类和当前数字为 1 的类。这让我相信 RNN 模型没有正确学习查看序列的先前值。
有几个教程和示例([ 1 ]、[ 2 ]、[ 3 ])演示了如何在张量流中构建和使用循环神经网络(RNN),但在研究它们之后我仍然没有看到我的问题(它没有有助于所有示例都使用文本作为源数据)。
我将数据作为tf.nn.rnn()length 列表输入T,其元素是[batch_size x input_size]序列。由于我的序列是一维的,input_size等于一,所以本质上我相信我正在输入一个长度序列的列表batch_size(我不清楚文档中哪个维度被视为时间维度)。这种理解正确吗?如果是这样的话,那么我不明白为什么 RNN 模型不能正确学习。
很难获得一小部分可以运行我的完整 RNN 的代码,这是我能做的最好的事情(它主要改编自此处的 PTB …
我正在使用传统的序列到序列框架在TensorFlow 1.0.1中构建编码器 - 解码器模型.当我在编码器和解码器中有一层LSTM时,一切正常.但是,当我尝试使用包裹在a中的> 1层LSTM时MultiRNNCell,我在调用时出错tf.contrib.legacy_seq2seq.rnn_decoder.
完整的错误是在这篇文章的最后,但简而言之,它是由一条线引起的
(c_prev, m_prev) = state
Run Code Online (Sandbox Code Playgroud)
在投掷的TensorFlow中TypeError: 'Tensor' object is not iterable..我对此感到困惑,因为我传递的初始状态rnn_decoder确实是一个应该是的元组.据我所知,使用1层或> 1层的唯一区别是后者涉及使用MultiRNNCell.使用它时是否有一些我应该知道的API怪癖?
这是我的代码(基于此 GitHub仓库中的示例).道歉的长度; 这是我能做到的最小化,同时仍然是完整和可验证的.
import tensorflow as tf
import tensorflow.contrib.legacy_seq2seq as seq2seq
import tensorflow.contrib.rnn as rnn
seq_len = 50
input_dim = 300
output_dim = 12
num_layers = 2
hidden_units = 100
sess = tf.Session()
encoder_inputs = []
decoder_inputs = []
for i in range(seq_len):
encoder_inputs.append(tf.placeholder(tf.float32, shape=(None, input_dim),
name="encoder_{0}".format(i)))
for i in range(seq_len + …Run Code Online (Sandbox Code Playgroud) 我在 Tensorflow 中使用 LSTM 单元。
lstm_cell = tf.contrib.rnn.BasicLSTMCell(lstm_units)
Run Code Online (Sandbox Code Playgroud)
我想知道如何初始化权重和状态,或者更确切地说,Tensorflow 中 LSTM 单元(状态和权重)的默认初始化器是什么?
有没有一种简单的方法来手动设置初始化程序?
注意:tf.get_variable()据我从文档中了解到,使用了 glorot_uniform_initializer 。
我想将解码器的embedding层和预测层的权重联系起来。next_word嵌入维度设置为 300,解码器的隐藏大小设置为 600。NMT 中目标语言的词汇量为 50000,因此嵌入权重维度为 ,50000 x 300预测下一个单词的线性层权重为50000 x 600。
那么,我怎样才能把它们绑起来呢?在这种情况下实现重量绑定的最佳方法是什么?
python deep-learning recurrent-neural-network pytorch seq2seq
我是 TF/Keras/ML 的初学者,正在开发我的第一个非指导项目。这个想法是创建一个 RNN,它可以预测给定股票在给定日期的“变动”(我目前将其定义为开盘价高于/低于收盘价)。我的想法是训练 RNN 根据实际价格数据和一大堆技术指标来预测给定日期的价格变动。
我希望模型输出的内容如下所示。
然后,我尝试创建两个 TimeseriesGenerator 对象,其中缩放的原始数据作为数据传入,上面显示的理想输出作为目标传入。我希望该模型能够接收所有这些信息并输出一个类别,该类别将告诉我其预测的价格变动。此外,我希望该模型能够对未来的价格变动进行预测。

实际模型本身相当简单,几个 LSTM 层馈入密集层,最终输出层是一个神经元,我想用它来确定类别。
model = Sequential()
model.add(LSTM(2000,input_shape=(length,scaled_train.shape[1]), return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(1000,input_shape=(length,scaled_train.shape[1]), return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(500,input_shape=(length,scaled_train.shape[1])))
model.add(Dropout(0.2))
# model.add(Dense(1000))
model.add(Dense(250))
model.add(Dense(1))
model.compile(optimizer='adam',loss='binary_crossentropy')
Run Code Online (Sandbox Code Playgroud)
执行所有这些操作时遇到的错误是非描述性关键错误,该错误在模型上调用 fit_generator 时或尝试从生成器本身获取给定的输入/输出组合时发生。

我认为我对 TimeseriesGenerator 在幕后实际所做的事情存在误解。我的方法有什么问题?我该如何纠正它以实现我的目标?
在谈到图像/计算机视觉时,我试图了解 CNN 架构和 RCNN 架构之间的基本概念差异。
如果我错了,请纠正我,但据我所知,CNN 提供空间不变性(位置),而 RNN 提供时间不变性(时间)。
artificial-intelligence deep-learning conv-neural-network tensorflow recurrent-neural-network