Recurrentshop和Keras:多维RNN导致尺寸不匹配误差

时间:2018-01-08 17:18:30

标签: python tensorflow machine-learning keras recurrent-neural-network

我对Recurrentshop和Keras有一个问题。我试图在Recurrent Model中使用Concatenate和多维张量,无论我如何排列Input,shape和batch_shape,我都会遇到维度问题。

最小代码:

from keras.layers import *
from keras.models import *
from recurrentshop import *
from keras.layers import Concatenate

input_shape=(128,128,3)

x_t = Input(shape=(128,128,3,))
h_tm1 = Input(shape=(128,128,3, ))

h_t1 = Concatenate()([x_t, h_tm1])
last = Conv2D(3, kernel_size=(3,3), strides=(1,1), padding='same',     name='conv2')(h_t1)

# Build the RNN
rnn = RecurrentModel(input=x_t, initial_states=[h_tm1], output=last,     final_states=[last], state_initializer=['zeros'])

x = Input(shape=(128,128,3, ))
y = rnn(x)

model = Model(x, y)

model.predict(np.random.random((1, 128, 128, 3)))

错误码:

ValueError: Shape must be rank 3 but it is rank 4 for 'recurrent_model_1/concatenate_1/concat' (op:ConcatV2) with input shapes: [?,128,3], [?,128,128,3], [].

请帮忙。

1 个答案:

答案 0 :(得分:3)

尝试此操作(已更改的行已注释):

from recurrentshop import *
from keras.layers import Concatenate

x_t = Input(shape=(128, 128, 3,))
h_tm1 = Input(shape=(128, 128, 3,))

h_t1 = Concatenate()([x_t, h_tm1])
last = Conv2D(3, kernel_size=(3, 3), strides=(1, 1), padding='same', name='conv2')(h_t1)

rnn = RecurrentModel(input=x_t,
                     initial_states=[h_tm1],
                     output=last,
                     final_states=[last],
                     state_initializer=['zeros'])

x = Input(shape=(1, 128, 128, 3,))  # a series of 3D tensors -> 4D
y = rnn(x)

model = Model(x, y)
model.predict(np.random.random((1, 1, 128, 128, 3)))  # a batch of x -> 5D