Keras 在recurrentshop中使用返回序列

Keras 在recurrentshop中使用返回序列,keras,recurrent-neural-network,Keras,Recurrent Neural Network,我正在尝试使用Keras编写一个自定义的递归层。 输入是一个长度为“timesteps”的序列,输出应该是所有timesteps输出的序列,因此我使用return\u sequences=True 递归模型有两个输入,其中一个是最后一个时间步的递归输入。我使用的这一层与类似,但我不断收到错误信息,如“您必须使用dtype float为占位符张量'input_2'提供一个值”。我做错了什么?完整代码如下: 将keras.backend导入为K 从recurrentshop导入RecurrentMo

我正在尝试使用Keras编写一个自定义的递归层。 输入是一个长度为“timesteps”的序列,输出应该是所有timesteps输出的序列,因此我使用
return\u sequences=True

递归模型有两个输入,其中一个是最后一个时间步的递归输入。我使用的这一层与类似,但我不断收到错误信息,如“您必须使用dtype float为占位符张量'input_2'提供一个值”。我做错了什么?完整代码如下:

将keras.backend导入为K
从recurrentshop导入RecurrentModel
将numpy作为np导入
从keras.models导入模型
从keras.layers导入稠密、重塑、Conv1D、输入、Lambda、连接
从keras.optimizers导入Adam
#参数:
时间步长=35
输出尺寸=315
输入尺寸=10
批量大小=100
#循环层定义:
def myRNN(输入尺寸、输出尺寸):
inp=输入((输入尺寸)
h_tm1=输入((输出尺寸)
修正的λh=λ(λx:x*K.和(K.平方(inp)))(h_tm1)
修改的_inp=densite(输出尺寸,使用_bias=False,激活=tanh')(inp)
修改后的_-inp=重塑((输出尺寸,1))(修改后的_-inp)
修改的_inp=Conv1D(128,7,padding='same',activation='tanh',use_bias=False)(修改的_inp)
修改的_inp=Lambda(Lambda x:K.sum(x,轴=-1))(修改的_inp)
hid=串联([modified_h,modified_inp],轴=-1)
h_t=密集(输出尺寸,使用偏差=False,激活=tanh')(hid)
返回递归模型(输入=输入,输出=输出,初始状态=输出tm1,最终状态=输出t,
返回\u sequences=True,状态\u初始值设定项=['zeros'])
#构建模型:
inp=输入((时间步,输入尺寸))
温度=myRNN(输入尺寸,输出尺寸)(输入尺寸)
out=重塑((时间步长*输出尺寸,1))(温度)
模型=模型(输入=输入,输出=输出)
compile(loss='mse',optimizer='adam')
#测试模型:
inp=np.random.rand(批量大小、时间步长、输入尺寸)
预测=模型预测(inp)

发现问题出在Lambda层:

modified_h = Lambda(lambda x: x * K.sum(K.square(inp)))(h_tm1)
通过定义函数解决了这个问题:

def factored_h(arg):
    norm = K.sum(K.square(arg[0]))
    return arg[1]*norm
将Lambda层重新表述如下:

modified_h =Lambda(factored_h)([inp, h_tm1])

Υ你可以接受你自己的答案,如果你知道答案有效的话。通过这种方式,您可以通知其他人实际存在有效的解决方案。