我试图调和我对LSTM的理解,并在克里斯托弗·奥拉在克拉拉斯实施的这篇文章中指出.我正在关注Jason Brownlee为Keras教程撰写的博客.我主要困惑的是,
[samples, time steps, features]
和,让我们参考下面粘贴的代码集中讨论上述两个问题:
# reshape into X=t and Y=t+1
look_back = 3
trainX, trainY = create_dataset(train, look_back)
testX, testY = create_dataset(test, look_back)
# reshape input to be [samples, time steps, features]
trainX = numpy.reshape(trainX, (trainX.shape[0], look_back, 1))
testX = numpy.reshape(testX, (testX.shape[0], look_back, 1))
########################
# The IMPORTANT BIT
##########################
# create and fit the LSTM network
batch_size = 1
model = Sequential()
model.add(LSTM(4, …
Run Code Online (Sandbox Code Playgroud) 考虑示例代码.
我想知道如何在可能爆炸梯度的RNN上对此网络应用渐变剪辑.
tf.clip_by_value(t, clip_value_min, clip_value_max, name=None)
Run Code Online (Sandbox Code Playgroud)
这是一个可以使用的示例,但我在哪里介绍这个?在defN的RNN
lstm_cell = rnn_cell.BasicLSTMCell(n_hidden, forget_bias=1.0)
# Split data because rnn cell needs a list of inputs for the RNN inner loop
_X = tf.split(0, n_steps, _X) # n_steps
tf.clip_by_value(_X, -1, 1, name=None)
Run Code Online (Sandbox Code Playgroud)
但是这没有意义,因为张量_X是输入而不是渐变的被剪裁的东西?
我是否必须为此定义自己的优化器,还是有更简单的选项?
上一个问题的延续:Tensorflow - TypeError: 'int' object is not iterable
我的训练数据是一个列表列表,每个列表包含 1000 个浮点数。例如,x_train[0] =
[0.0, 0.0, 0.1, 0.25, 0.5, ...]
Run Code Online (Sandbox Code Playgroud)
这是我的模型:
model = Sequential()
model.add(LSTM(128, activation='relu',
input_shape=(1000, 1), return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(128, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(1, activation='sigmoid'))
opt = tf.keras.optimizers.Adam(lr=1e-3, decay=1e-5)
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=3, validation_data=(x_test, y_test))
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
Traceback (most recent call last):
File "C:\Users\bencu\Desktop\ProjectFiles\Code\Program.py", line 88, in FitModel
model.fit(x_train, y_train, epochs=3, validation_data=(x_test, y_test))
File "C:\Users\bencu\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\keras\engine\training.py", line 728, in fit
use_multiprocessing=use_multiprocessing)
File "C:\Users\bencu\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py", line 224, in fit …
Run Code Online (Sandbox Code Playgroud) 从Keras文档:
dropout:浮点数介于0和1之间.为输入的线性变换而下降的单位的分数.
recurrent_dropout:浮点数在0和1之间.对于循环状态的线性变换,单位的分数下降.
任何人都可以指出每个辍学下面的图像在哪里发生?
我在github上看到了这个LSTM语言模型的例子(链接).它一般来说对我来说非常清楚.但是我仍然在努力理解调用的内容contiguous()
,这在代码中会多次发生.
例如,在代码输入的第74/75行中,创建LSTM的目标序列.数据(存储在其中ids
)是二维的,其中第一维是批量大小.
for i in range(0, ids.size(1) - seq_length, seq_length):
# Get batch inputs and targets
inputs = Variable(ids[:, i:i+seq_length])
targets = Variable(ids[:, (i+1):(i+1)+seq_length].contiguous())
Run Code Online (Sandbox Code Playgroud)
举个简单的例子,当使用批量大小为1和seq_length
10时inputs
,targets
看起来像这样:
inputs Variable containing:
0 1 2 3 4 5 6 7 8 9
[torch.LongTensor of size 1x10]
targets Variable containing:
1 2 3 4 5 6 7 8 9 10
[torch.LongTensor of size 1x10]
Run Code Online (Sandbox Code Playgroud)
所以一般来说我的问题是,contiguous()
我需要什么以及为什么需要它?
此外,我不明白为什么该方法被调用目标序列而不是输入序列,因为两个变量都包含相同的数据.
怎么可能targets
是inputs
不连续的,仍然是连续的? …
在LSTM网络(了解LSTM)中,为什么输入门和输出门使用tanh?这背后的直觉是什么?它只是一个非线性变换?如果是,我可以将两者都更改为另一个激活功能(例如ReLU)吗?
machine-learning deep-learning lstm recurrent-neural-network activation-function
在MNIST LSTM示例中,我不明白"隐藏层"的含义.是否随着时间的推移代表展开的RNN时会形成虚构层?
为什么num_units = 128
在大多数情况下?
我知道我应该详细阅读colah的博客来理解这一点,但在此之前,我只是希望得到一些代码来处理我所拥有的时间序列数据.
我正在使用深度学习库keras并尝试堆叠多个LSTM而没有运气.以下是我的代码
model = Sequential()
model.add(LSTM(100,input_shape =(time_steps,vector_size)))
model.add(LSTM(100))
Run Code Online (Sandbox Code Playgroud)
上面的代码在第三行返回错误 Exception: Input 0 is incompatible with layer lstm_28: expected ndim=3, found ndim=2
输入X是一个形状的张量(100,250,50).我在tensorflow后端运行keras
有人可以解释一下吗?我知道双向LSTM有前向和后向通过,但这比单向LSTM有什么优势?
他们每个人更适合什么?
machine-learning neural-network lstm keras recurrent-neural-network
普通Dense
层中的第一个参数也是units
,并且是该层中的神经元/节点的数量.然而,标准LSTM单元如下所示:
(这是" 理解LSTM网络 " 的重写版本)
在Keras,当我创建这样的LSTM对象LSTM(units=N, ...)
时,我实际上是在创建N
这些LSTM单元吗?或者它是LSTM单元内"神经网络"层的大小,即W
公式中的?或者是别的什么?
对于上下文,我正在基于此示例代码工作.
以下是文档:https://keras.io/layers/recurrent/
它说:
units:正整数,输出空间的维数.
这让我觉得它是Keras LSTM"图层"对象的输出数量.意味着下一层将有N
输入.这是否意味着N
LSTM层中实际存在这些LSTM单元,或者可能只运行一个 LSTM单元用于N
迭代输出N
这些h[t]
值,例如,从h[t-N]
多达h[t]
?
如果只定义了输出的数量,这是否意味着输入尚可,说,只是一个,还是我们必须手动创建滞后输入变量x[t-N]
来x[t]
,一个由定义的每个LSTM单位units=N
的说法?
在我写这篇文章的时候,我发现了论证的return_sequences
作用.如果设置为True
所有N
输出都传递到下一层,而如果设置为False
它,则只将最后一个h[t]
输出传递给下一层.我对吗?