0

我想将一些变量作为初始状态输入 RNN 或 LSTM 层,并将另一个变量作为输入输入神经网络。My Xtrain (20000,6) 是一个时序电子电路瞬态分析输入阵列,它有 20k 个样本和六个变量,Vin,Vc1,Vc2,Vc3,il1,il2。Vin 用于输入,其余五个我想作为初始状态输入,并且每次都成功进入神经网络。Ytrain(20000,1) 是电子电路的输出 Vout。下图可以做一些说明。 在此处输入图像描述

但是我不知道这个的语法,我已经挣扎了很多天。我的垃圾代码是,第三行有错误:

input_layer = Input(shape=(None,k,5))
# print(input_layer.get_shape().as_list)
hidden_1, state_h, state_c = LSTM(units=100, stateful=True, dropout=0.1, return_state=True, return_sequences=True)(input_layer[:,:,0], initial_state=[input_layer[:,:,1:],input_layer[:,:,-1]]) 
print(hidden_1.get_shape().as_list)
hideen2 = LSTM(units=100, stateful=True, dropout=0.1, return_state=False)(hidden_1, initial_state=[state_h, state_c], training=True)
hidden3 = Dense(10, activation='relu')(hidden2)
output = Dense(1, activation='sigmoid')(hidden3)
model2 = tf.keras.models.Model(input_layer, output)
opt=tf.keras.optimizers.Adam()
model2.compile(optimizer=opt, loss="mse")
model2.summary()

错误是这样的:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-31-54c710caaaa3> in <module>
      2 # print(input_layer.get_shape().as_list)
      3 
----> 4 hidden_1, state_h, state_c = LSTM(units=100, stateful=True, dropout=0.1, return_state=True, return_sequences=True)(input_layer[:,:,0], initial_state=[input_layer[:,:,1:],input_layer[:,:,-1]])
      5 
      6 

c:\program files\python38\lib\site-packages\tensorflow\python\keras\layers\recurrent.py in __call__(self, inputs, initial_state, constants, **kwargs)
    712       # Perform the call with temporarily replaced input_spec
    713       self.input_spec = full_input_spec
--> 714       output = super(RNN, self).__call__(full_input, **kwargs)
    715       # Remove the additional_specs from input spec and keep the rest. It is
    716       # important to keep since the input spec was populated by build(), and

c:\program files\python38\lib\site-packages\tensorflow\python\keras\engine\base_layer.py in __call__(self, *args, **kwargs)
    967     # >> model = tf.keras.Model(inputs, outputs)
    968     if _in_functional_construction_mode(self, inputs, args, kwargs, input_list):
--> 969       return self._functional_construction_call(inputs, args, kwargs,
    970                                                 input_list)
    971 

c:\program files\python38\lib\site-packages\tensorflow\python\keras\engine\base_layer.py in _functional_construction_call(self, inputs, args, kwargs, input_list)
   1105         layer=self, inputs=inputs, build_graph=True, training=training_value):
   1106       # Check input assumptions set after layer building, e.g. input shape.
-> 1107       outputs = self._keras_tensor_symbolic_call(
   1108           inputs, input_masks, args, kwargs)
   1109 

c:\program files\python38\lib\site-packages\tensorflow\python\keras\engine\base_layer.py in _keras_tensor_symbolic_call(self, inputs, input_masks, args, kwargs)
    838       return nest.map_structure(keras_tensor.KerasTensor, output_signature)
    839     else:
--> 840       return self._infer_output_signature(inputs, args, kwargs, input_masks)
    841 
    842   def _infer_output_signature(self, inputs, args, kwargs, input_masks):

c:\program files\python38\lib\site-packages\tensorflow\python\keras\engine\base_layer.py in _infer_output_signature(self, inputs, args, kwargs, input_masks)
    876           # overridden).
    877           # TODO(kaftan): do we maybe_build here, or have we already done it?
--> 878           self._maybe_build(inputs)
    879           inputs = self._maybe_cast_inputs(inputs)
    880           outputs = call_fn(inputs, *args, **kwargs)

c:\program files\python38\lib\site-packages\tensorflow\python\keras\engine\base_layer.py in _maybe_build(self, inputs)
   2623         # operations.
   2624         with tf_utils.maybe_init_scope(self):
-> 2625           self.build(input_shapes)  # pylint:disable=not-callable
   2626       # We must set also ensure that the layer is marked as built, and the build
   2627       # shape is stored since user defined build functions may not be calling

c:\program files\python38\lib\site-packages\tensorflow\python\keras\layers\recurrent.py in build(self, input_shape)
    595     if self.state_spec is not None:
    596       # initial_state was passed in call, check compatibility
--> 597       self._validate_state_spec(state_size, self.state_spec)
    598     else:
    599       self.state_spec = [

c:\program files\python38\lib\site-packages\tensorflow\python\keras\layers\recurrent.py in _validate_state_spec(cell_state_sizes, init_state_specs)
    633           cell_state_spec.shape[1:]).is_compatible_with(
    634               tensor_shape.TensorShape(cell_state_size)):
--> 635         raise validation_error
    636 
    637   @doc_controls.do_not_doc_inheritable

ValueError: An `initial_state` was passed that is not compatible with `cell.state_size`. Received `state_spec`=ListWrapper([InputSpec(shape=(None, None, 499, 5), ndim=4), InputSpec(shape=(None, None, 5), ndim=3)]); however `cell.state_size` is [100, 100]

谢谢!

4

0 回答 0