我想将一些变量作为初始状态输入 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]
谢谢!