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

时间:2018-05-28 12:57:06

标签: python keras lstm

我正在使用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)

1 个答案:

答案 0 :(得分:0)

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