Python 嵌入带有接受更多参数的_init_uu的自定义RNN单元(3对1)
我试图创建一个与本文中提出的模型类似的模型: 自定义单元格代码位于: 但是,我无法将这个自定义单元嵌入任何RNN模型,我假设这是因为init接受3个参数,而不是标准的“num_单位” 我试着在下面的例子: 但我有一个错误: TypeError回溯(最近一次调用上次) 在2 x=keras.输入((无, 5) )3层=RNN(单元)-->4 y=层(x) ~/.local/lib/python3.5/site-packages/keras/layers/returnal.py in 调用(自身、输入、初始状态、常数,**kwargs)539 540如果 初始_状态为无,常量为无:-->541返回超级(RNN, 如果初始状态或 已指定常数,且为Keras ~/.local/lib/python3.5/site-packages/keras/engine/base\u layer.py in 调用(self,input,**kwargs)487#实际调用层,488# 正在收集输出、掩码和形状。-->489输出= 自我调用(输入,**kwargs)490输出屏蔽= self.compute_掩码(输入,前一个_掩码)491 ~/.local/lib/python3.5/site-packages/keras/layers/returnal.py in 调用(自身、输入、掩码、训练、初始状态、常量)680 掩码=掩码,681展开=自我展开,-->682输入长度=时间步长)683 如果self.stateful:684更新=[] ~/.local/lib/python3.5/site-packages/keras/backend/tensorflow_backend.py 在rnn中(步进功能、输入、初始状态、后退、屏蔽、, 常数,展开,输入长度)3101常数=常数,3102 展开=展开,->3103输入长度=输入长度)3104可到达= tf_utils.get_reachable_from_input([learning_phase()]),3105 目标=[最后的输出]) ~/.local/lib/python3.5/site-packages/tensorflow/python/keras/backend.py 在rnn中(步进功能、输入、初始状态、后退、屏蔽、, 常量、展开、输入长度、时间、零输出(用于掩码) 3730#该值被丢弃。3731输出时间零点= 步进函数(->3732输入时间0,元组(初始状态)+ 元组(常数)3733输出=元组(3734 张量数组( ~/.local/lib/python3.5/site-packages/keras/layers/returnal.py in 步骤(输入,状态)671其他:672 def步骤(输入,状态):-->673 返回self.cell.call(输入、状态,**kwargs)674 675最后输出, 输出,状态=K.rnn(步骤 TypeError:call()接受2个位置参数,但给出了3个 你能帮我弄清楚这是初始化问题、呼叫问题还是我需要为这个自定义单元格定义一个自定义层吗 我试着在互联网上寻找答案,但对于如何在RNN模型中嵌入自定义单元,我却没有任何明确的答案 提前谢谢大家,Python 嵌入带有接受更多参数的_init_uu的自定义RNN单元(3对1),python,tensorflow,keras,recurrent-neural-network,Python,Tensorflow,Keras,Recurrent Neural Network,我试图创建一个与本文中提出的模型类似的模型: 自定义单元格代码位于: 但是,我无法将这个自定义单元嵌入任何RNN模型,我假设这是因为init接受3个参数,而不是标准的“num_单位” 我试着在下面的例子: 但我有一个错误: TypeError回溯(最近一次调用上次) 在2 x=keras.输入((无, 5) )3层=RNN(单元)-->4 y=层(x) ~/.local/lib/python3.5/site-packages/keras/layers/returnal.py in 调用(自身、输
Sam当我将keras直接导入程序时,我能够重新创建您的问题。请参见下文
%tensorflow_version 1.x
import keras
from keras import backend as K
import tensorflow as tf
from tensorflow.keras import layers
from tensorflow.keras.layers import RNN
class MinimalRNNCell(keras.layers.Layer):
def __init__(self, units, **kwargs):
self.units = units
self.state_size = units
super(MinimalRNNCell, self).__init__(**kwargs)
def build(self, input_shape):
self.kernel = self.add_weight(shape=(input_shape[-1], self.units),
initializer='uniform',
name='kernel')
self.recurrent_kernel = self.add_weight(
shape=(self.units, self.units),
initializer='uniform',
name='recurrent_kernel')
self.built = True
def call(self, inputs, states):
prev_output = states[0]
h = K.dot(inputs, self.kernel)
output = h + K.dot(prev_output, self.recurrent_kernel)
return output, [output]
# Let's use this cell in a RNN layer:
cell = MinimalRNNCell(32)
x = keras.Input((None, 5))
layer = RNN(cell)
y = layer(x)
输出-
TensorFlow is already loaded. Please restart the runtime to change versions.
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-3-0f3bed686a7d> in <module>()
34 x = keras.Input((None, 5))
35 layer = RNN(cell)
---> 36 y = layer(x)
5 frames
/usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py in symbolic_fn_wrapper(*args, **kwargs)
73 if _SYMBOLIC_SCOPE.value:
74 with get_graph().as_default():
---> 75 return func(*args, **kwargs)
76 else:
77 return func(*args, **kwargs)
TypeError: __call__() takes 2 positional arguments but 3 were given
I Ran Successfully
输出-
TensorFlow is already loaded. Please restart the runtime to change versions.
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-3-0f3bed686a7d> in <module>()
34 x = keras.Input((None, 5))
35 layer = RNN(cell)
---> 36 y = layer(x)
5 frames
/usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py in symbolic_fn_wrapper(*args, **kwargs)
73 if _SYMBOLIC_SCOPE.value:
74 with get_graph().as_default():
---> 75 return func(*args, **kwargs)
76 else:
77 return func(*args, **kwargs)
TypeError: __call__() takes 2 positional arguments but 3 were given
I Ran Successfully
希望这能回答你的问题。学习愉快。@SCoder-如果答案能回答你的问题,请接受并投票。谢谢。