Keras 如何使这个1单元LSTM网络?

Keras 如何使这个1单元LSTM网络?,keras,lstm,Keras,Lstm,我想制作一个LSTM网络,学习每次序列中有一个0时返回序列的第一个值,如果有另一个值,则返回0 例如: x = 9 8 3 1 0 3 4 y = 0 0 0 0 9 0 0 网络会记住一个值,并在接收到特殊信号时返回 我认为a可以用这样一个LSTM单元来实现: 红色表示权重,灰色区域内表示偏差 这是我的模型: model2=Sequential() model2.add(LSTM(input_dim=1, output_dim=1, return_sequences = True)) mo

我想制作一个LSTM网络,学习每次序列中有一个0时返回序列的第一个值,如果有另一个值,则返回0

例如:

x = 9 8 3 1 0 3 4
y = 0 0 0 0 9 0 0
网络会记住一个值,并在接收到特殊信号时返回

我认为a可以用这样一个LSTM单元来实现:

红色表示权重,灰色区域内表示偏差

这是我的模型:

model2=Sequential()
model2.add(LSTM(input_dim=1, output_dim=1, return_sequences = True))
model2.add(TimeDistributed(Dense(output_dim=1, activation='linear')))
model2.compile(loss = "mse", optimizer = "rmsprop")
在这里,我如何设置我的牢房的重量,但我不确定所有的顺序:

# w : weights of x_t
# u : weights of h_{t-1}
# order of array: input_gate, new_input, forget_gate, output_gate 
#                 (Tensorflow order)

w = np.array([[0, 1, 0, -100]], dtype=np.float32)
u = np.array([[1, 0, 0, 0]], dtype=np.float32)
biases = np.array([0, 0, 1, 1], dtype=np.float32)
model2.get_layer('lstm').set_weights([w, u, biases])
我说的对吗?这是我在图上写的吗

要工作,它需要有正确的初始值。如何设置单元格的初始值c和先前输出的初始值h?我在源代码中看到了这一点

    h_tm1 = states[0]  # previous memory state
    c_tm1 = states[1]  # previous carry state

但是我找不到如何使用它。

为什么不手动执行此操作?这很简单,而且是一个精确的计算。你不需要权重,这对于权重来说当然是不可微的

给定一个具有形状
(批次、步骤、特征)的输入张量


警告:如果您打算将其用于其他层的输入,则找到零的概率将非常小,因此该层将毫无用处

这是一个学习LSTM的玩具网络,我想知道如何在Keras中设置初始状态,并确保正确设置权重。不过谢谢你的回答,我不知道我们能做到。
def processSequence(x):

    initial = x[:,0:1]
    zeros = K.cast(K.equal(x,0), K.floatx())

    return initial * zeros

model.add(Lambda(processSequence))