…来自TensorFlow,在那里几乎所有的形状和所有的东西都是明确定义的,我对Keras用于递归模型的API感到困惑。让一个elman网络在tf工作是很容易的,但是keras拒绝接受正确的形状…
例如:
x = k.layers.Input(shape=(2,))
y = k.layers.Dense(10)(x)
m = k.models.Model(x, y)
…工作完美,符合
model.summary()
我得到一个有形状的输入层
(None, 2)
,然后是具有输出形状的密集层
(None, 10)
。这很有意义,因为keras会自动为批处理添加第一个维度。
但是,以下代码:
x = k.layers.Input(shape=(2,))
y = k.layers.SimpleRNN(10)(x)
m = k.models.Model(x, y)
引发异常
ValueError: Input 0 is incompatible with layer simple_rnn_1: expected ndim=3, found ndim=2
.
它只有在我添加另一个维度时才起作用:
x = k.layers.Input(shape=(2,1))
y = k.layers.SimpleRNN(10)(x)
m = k.models.Model(x, y)
……但现在,当然,我的意见不会是
(无,2)
不再。
模型摘要()
:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) (None, 2, 1) 0
_________________________________________________________________
simple_rnn_1 (SimpleRNN) (None, 10) 120
=================================================================
我怎样才能有类型的输入
batch_size
X
2
当我只想给网络提供2个值的向量时?
此外,我如何连锁RNN细胞?
x = k.layers.Input(shape=(2, 1))
h = k.layers.SimpleRNN(10)(x)
y = k.layers.SimpleRNN(10)(h)
m = k.models.Model(x, y)
…对不兼容的维度大小引发相同的异常。
此示例有效:
x = k.layers.Input(shape=(2, 1))
h = k.layers.SimpleRNN(10, return_sequences=True)(x)
y = k.layers.SimpleRNN(10)(h)
m = k.models.Model(x, y)
…但是然后层
h
不输出
(无,10)
再也没有了,但是
(None, 2, 10)
因为它返回整个序列,而不仅仅是“常规”RNN单元输出。
为什么要这么做?
此外:美国在哪里?它们只是默认为1个循环状态吗?