我想模拟以下内容:
y(t)=F(x(t-1),x(t-2),...x(tk))
或者说一个函数,其当前输出取决于最后 k 个输入。
1-我知道一种方法是建立一个经典的神经网络,每个y(t) 的k 个输入为{x(t-1),x(t-2),...x(tk)}并对其进行训练。那么使用 RNN 来解决这个问题有什么好处呢?
2-假设使用 RNN,我应该只使用 x(t) (或 x(t-1))并假设隐藏层可以通过输入找到 y(t) 与过去 k 个输入的关系它的内存(隐藏层)?
3-考虑到我们想要根据最后 k 个输入来估计输出,使用像 Deep RNN 或 LSTM 这样的深度网络对于此类问题有什么优越的好处吗?
与我从.h5文件加载该训练模型时相比,在训练后测试 Keras LSTM 模型时,我有很大的不同(第一个的准确度总是 > 0.85,但后者的准确度总是低于 < 0.2,即随机猜测) .
但是我检查了权重,它们是相同的,而且 Keras 给我的稀疏布局 viaplot_model是相同的,但由于这只能检索粗略的概述:
是否可以显示 Keras 模型的完整布局(尤其是节点连接)?
visualization lstm keras recurrent-neural-network machine-learning-model
我一直在研究使用 RNN 生成文本,似乎常用的技术是逐个字符输入文本,然后让 RNN 预测下一个字符。
为什么不使用相同的技术,而是使用单词而不是字符。这对我来说似乎是一种更好的技术,因为 RNN 不会犯任何错别字,而且训练速度会更快。
我错过了什么吗?
此外,是否可以创建一个单词预测 RNN,但以某种方式输入在 word2vec 上预先训练的单词,以便 RNN 可以理解它们的含义?
nlp machine-learning deep-learning recurrent-neural-network rnn
我想构建一个 3 层的 LSTM 网络。这是代码:
num_layers=3
time_steps=10
num_units=128
n_input=1
learning_rate=0.001
n_classes=1
...
x=tf.placeholder("float",[None,time_steps,n_input],name="x")
y=tf.placeholder("float",[None,n_classes],name="y")
input=tf.unstack(x,time_steps,1)
lstm_layer=rnn_cell.BasicLSTMCell(num_units,state_is_tuple=True)
network=rnn_cell.MultiRNNCell([lstm_layer for _ in range(num_layers)],state_is_tuple=True)
outputs,_=rnn.static_rnn(network,inputs=input,dtype="float")
Run Code Online (Sandbox Code Playgroud)
它num_layers=1 工作得很好,但是对于不止一层,我在这一行收到错误:
outputs,_=rnn.static_rnn(network,inputs=input,dtype="float")
Run Code Online (Sandbox Code Playgroud)
ValueError:尺寸必须相等,但“rnn/rnn/multi_rnn_cell/cell_0/cell_0/basic_lstm_cell/MatMul_1”(操作:“MatMul”)的尺寸为 256 和 129,输入形状为:[?,256]、[129,512]。
谁能解释一下 129 和 512 的值是从哪里来的?
python deep-learning lstm tensorflow recurrent-neural-network
这似乎是一个微不足道的问题,但我一直无法找到答案。
我已经批量处理了一系列形状的图像:
[batch_size, number_of_frames, frame_height, frame_width, number_of_channels]
我想通过几个卷积层和池化层来传递每一帧。然而,TensorFlow 的conv2d层接受形状的 4D 输入:
[batch_size, frame_height, frame_width, number_of_channels]
我的第一次尝试是使用tf.map_fnoveraxis=1,但我发现这个函数不会传播梯度。
我的第二次尝试是tf.unstack在第一个维度上使用,然后使用tf.while_loop. 但是, mybatch_size和number_of_frames是动态确定的(即两者都是None),如果未指定则tf.unstack引发。我尝试指定,但这会引发{ValueError} Cannot infer num from shape (?, ?, 30, 30, 3)numnum=tf.shape(self.observations)[1]{TypeError} Expected int for argument 'num' not <tf.Tensor 'A2C/infer/strided_slice:0' shape=() dtype=int32>.
tensorflow recurrent-neural-network convolutional-neural-network
我在 RNN 工作。我有以下来自某个站点的代码行。如果您观察到第二层没有“returnSequence”参数。
我假设返回序列是强制性的,因为它应该返回序列。你能告诉为什么这没有定义。
第一层 LSTM:
regressor.add(LSTM(units = 30, return_sequences = True))
Run Code Online (Sandbox Code Playgroud)
第二层 LSTM:
regressor.add(LSTM(units = 30))
Run Code Online (Sandbox Code Playgroud) 我一直在阅读有关 Keras RNN 模型(LSTM 和 GRU)的内容,作者似乎主要关注语言数据或使用由先前时间步骤组成的训练实例的单变量时间序列。我的数据有点不同。
我在 10 年中每年测量 100,000 人的 20 个变量作为输入数据,并将第 11 年测量的 20 个变量作为输出数据。我想做的是预测第 11 年其中一个变量(而不是其他 19 个)的值。
我的数据结构为X.shape = [persons, years, variables] = [100000, 10, 20]和Y.shape = [persons, variable] = [100000, 1]。下面是我的 LSTM 模型的 Python 代码。
## LSTM model.
# Define model.
network_lstm = models.Sequential()
network_lstm.add(layers.LSTM(128, activation = 'tanh',
input_shape = (X.shape[1], X.shape[2])))
network_lstm.add(layers.Dense(1, activation = None))
# Compile model.
network_lstm.compile(optimizer = 'adam', loss = 'mean_squared_error')
# Fit model.
history_lstm = network_lstm.fit(X, …Run Code Online (Sandbox Code Playgroud) 我写了一个神经网络代码,我想给它添加隐藏层。我可以访问这一小部分代码:
trainX, trainY = create_dataset(train, look_back)
testX, testY = create_dataset(test, look_back)
trainX = numpy.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))
testX = numpy.reshape(testX, (testX.shape[0], 1, testX.shape[1]))
model = Sequential()
model.add(LSTM(4, input_shape=(1, look_back)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(trainX, trainY, epochs=100, batch_size=1, verbose=2)
trainPredict = model.predict(trainX)
testPredict = model.predict(testX)
Run Code Online (Sandbox Code Playgroud)
有没有办法用这么多可用的信息向它添加隐藏层?此外,此代码在 Python3 中运行良好。
这将是一个很大的帮助。谢谢。
time-series python-3.x keras tensorflow recurrent-neural-network
我想验证我的损失函数,因为我读到 keras 中的 mse 损失函数存在问题。考虑 keras 中的 lstm 模型将 3d 时间序列预测为多目标 (y1, y2, y3)。假设一批输出序列的形状为 (10, 31, 1),下面的损失函数是否会取预测输出和真实输出之间的平方差,然后取 310 个样本的平均值,从而得到单个损失值?如果 3 个输出连接为 (10, 31, 3),此操作将如何发生
def mse(y_true, y_pred):
return keras.backend.mean(keras.backend.square(y_pred - y_true), axis=1)
Run Code Online (Sandbox Code Playgroud) 我想了解有关使用双向 LSTM 进行序列分类时合并模式的更多详细信息,尤其是对于我还不清楚的“Concat”合并模式。
根据我对这个方案的理解:
在将前向和后向层的合并结果传递到 sigmoid 函数后计算输出 y_t。“add”、“mul”和“average”合并模式似乎相当直观,但我不明白选择“concat”合并模式时输出 y_t 是如何计算的。实际上,使用这种合并模式,我们现在在 sidmoid 函数之前有一个向量而不是单个值。
keras ×6
lstm ×4
python ×4
tensorflow ×3
rnn ×2
time-series ×2
convolutional-neural-network ×1
mse ×1
nlp ×1
python-3.x ×1