首页 文章

连接到初始化程序的LSTM值错误

提问于
浏览
0

我正在使用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 /的初始化器来自控制流构造内部,例如循环或条件 . 在循环或条件内创建变量时,使用lambda作为初始化程序 .

如果我遵循错误,我注意到它归结为:

dtype:如果设置,则initial_value将转换为给定类型 . 如果为None,则保留数据类型(如果initial_value是Tensor),或者convert_to_tensor将决定 .

“转换为张量”会创建一个对象,然后会导致错误 . 显然,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 \ site- packages \ keras \ layers \ recurrent.py“,第499行,在调用返回超级(RNN,self).call(输入,** kwargs)文件”C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ keras \ engine \ topology.py“,第592行,在调用self.build(input_shapes [0])文件”C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ keras \ layers \ recurrent.py“,第461行,在build self中.cell.build(step_input_shape)文件“C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ keras \ layers \ recurrent.py”,第1838行,构建约束= self.kernel_constraint)文件“C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ keras \ legacy \ interfaces.py“,第91行,在包装器中返回func(* args,** kwargs)文件”C:\ ProgramData \ Anaconda3 \ lib \ site-packa ges \ keras \ engine \ topology.py“,第416行,在add_weight约束=约束中)文件”C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ keras \ backend \ tensorflow_backend.py“,第395行,变量v = tf.Variable(value,dtype = tf.as_dtype(dtype),name = name)文件“C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ tensorflow \ python \ ops \ variables.py”,第235行, init constraint = constraint)_init_from_args“initializer”中的文件“C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ tensorflow \ python \ ops \ variables.py”,第356行 . % 名称)

1 回答

  • 0

    在这种情况下,解决方案是重新启动内核 . 感谢DanielMöller

相关问题