我正在使用Keras构建LSTM模型。
def LSTM_model_1(X_train,Y_train,Dropout,hidden_units):
model = Sequential()
model.add(Masking(mask_value=666, input_shape=(X_train.shape[1],X_train.shape[2])))
model.add(LSTM(hidden_units, activation='tanh', return_sequences=True, dropout=Dropout))
model.add(LSTM(hidden_units, return_sequences=True))
model.add(LSTM(hidden_units, return_sequences=True))
model.add(Dense(Y_train.shape[-1], activation='softmax'))
model.compile(loss='mean_squared_error', optimizer='adam',metrics['categorical_accuracy'])
return model
输入数据很简单 X_train.shape =(77,100,34); Y_Train.shape =(77,100,7)
Y数据是单热编码的。两个输入张量都为最后一个列表条目填充零。 Y_train中的填充值为0.因此填充结束时没有状态值为1。 dropout = 0和hidden_units = 2似乎与以下错误无关。
不幸的是,我得到以下错误,我认为这与Y的形状有关。但是我不能把手指放在它上面。初始化/添加第一个LSTM层时会发生错误。
ValueError:变量lstm_58 / kernel /的初始化程序来自a 控制流构造,例如循环或条件。创建时 在循环或条件内的变量,使用lambda作为 初始化程序。
如果我遵循错误,我注意到它归结为:
dtype:如果设置,则initial_value将转换为给定类型。 如果
None
,将保留数据类型(如果initial_value
为 a Tensor),或convert_to_tensor
将决定。
“转换为张量”会创建一个对象,然后是None并导致错误。显然,LSTM会尝试将输入转换为张量......但是如果我查看输入,它已经是张量。
你们是否知道出了什么问题或者如何使用lambda作为初始化器?感谢
编辑:堆栈跟踪
文件“C:\ Users \ 310122653 \ Documents \ GitHub \ DNN \ build_model.py”,行 44,在LSTM_model_1中 model.add(LSTM(hidden_units,activation ='tanh',return_sequences = True,dropout = Dropout))
文件“C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ keras \ models.py”, 第492行,另外 output_tensor = layer(self.outputs [0])
文件 “C:\ ProgramData \ Anaconda3 \ LIB \站点包\ keras \图层\ recurrent.py” 第499行,致电 return super(RNN,self)。 call (输入,** kwargs)
文件 “C:\ ProgramData \ Anaconda3 \ LIB \站点包\ keras \发动机\ topology.py” 第592行,致电 self.build(input_shapes [0])
文件 “C:\ ProgramData \ Anaconda3 \ LIB \站点包\ keras \图层\ recurrent.py” 第461行,在构建中 self.cell.build(step_input_shape)
文件 “C:\ ProgramData \ Anaconda3 \ LIB \站点包\ keras \图层\ recurrent.py” 1838年,在建设中 约束= self.kernel_constraint)
文件 “C:\ ProgramData \ Anaconda3 \ LIB \站点包\ keras \遗留\ interfaces.py” 第91行,包装中 return func(* args,** kwargs)
文件 “C:\ ProgramData \ Anaconda3 \ LIB \站点包\ keras \发动机\ topology.py” 第416行,在add_weight中 约束=约束)
文件 “C:\ ProgramData \ Anaconda3 \ LIB \站点包\ keras \后端\ tensorflow_backend.py” 第395行,变量 v = tf.Variable(value,dtype = tf.as_dtype(dtype),name = name)
文件 “C:\ ProgramData \ Anaconda3 \ LIB \站点包\ tensorflow \ python的\ OPS \ variables.py” 第235行,在 init 中 约束=约束)
文件 “C:\ ProgramData \ Anaconda3 \ LIB \站点包\ tensorflow \ python的\ OPS \ variables.py” 第356行,在_init_from_args中 “初始化”。 %name)
答案 0 :(得分:0)
在这种情况下,解决方案是重新启动内核。 感谢DanielMöller