简体   繁体   English

如何构建keras model 多维输入多维output

[英]How to buid keras model with multi dimensional input multi dimensional output

I want to use sensor reading to estimate some quantities.我想使用传感器读数来估计一些数量。 My sensor readings in each time step have 9 elements and the out quantities have 4 elements我在每个时间步的传感器读数有 9 个元素,输出量有 4 个元素

input_size = (304414,9)
target_size = (304414,4)

I want to create a RNN model to estimate the output.我想创建一个 RNN model 来估计 output。

For preprocessing and create data set, I used this function对于预处理和创建数据集,我使用了这个 function

def create_dataset(dataset, look_back):
    dataX, dataY = [], []
    for i in range(len(dataset)-look_back):
        dataX.append(dataset[i:(i+look_back)]) # all 22 columns for X
        dataY.append(dataset[i + look_back, 9:14]) # first 8 columns for Y, just as an example
    return np.array(dataX), np.array(dataY)


data = np.concatenate((input, output), axis=1)
X, Y = create_dataset(data, 1)  

Now, my data set has been changed to input_size = (304413,1,13) target_size = (304413,4)现在,我的数据集已更改为 input_size = (304413,1,13) target_size = (304413,4)

The model which I used is我使用的 model 是

model=Sequential()
model.add(Embedding(1, 13, input_length=304413))
model.add(LSTM(12, input_shape=(304413,1,13), kernel_initializer='normal',activation='relu',return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(12, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(4, activation='relu'))

model.compile(loss='mean_squared_error', optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),metrics=['accuracy','mse'])

But after trying to use model.fit I encountered with this error但是在尝试使用model.fit之后我遇到了这个错误

ValueError: in user code:

    File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 1021, in train_function  *
        return step_function(self, iterator)
    File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 1010, in step_function  **
        outputs = model.distribute_strategy.run(run_step, args=(data,))
    File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 1000, in run_step  **
        outputs = model.train_step(data)
    File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 859, in train_step
        y_pred = self(x, training=True)
    File "/usr/local/lib/python3.7/dist-packages/keras/utils/traceback_utils.py", line 67, in error_handler
        raise e.with_traceback(filtered_tb) from None
    File "/usr/local/lib/python3.7/dist-packages/keras/engine/input_spec.py", line 264, in assert_input_compatibility
        raise ValueError(f'Input {input_index} of layer "{layer_name}" is '

    ValueError: Input 0 of layer "sequential_20" is incompatible with the layer: expected shape=(None, 304413), found shape=(None, 1, 13)

What is my mistake?我的错误是什么?

I think you simply have to set the input_shape inside the first layer added to your sequential model.我认为您只需将第一层内的input_shape添加到您的顺序 model 中。 In this case would be:在这种情况下将是:

model=Sequential()
model.add(Embedding(1, 13, input_length=304413, input_shape=(304413,1,13)))
model.add(LSTM(12, kernel_initializer='normal',activation='relu',return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(12, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(4, activation='relu'))

model.compile(loss='mean_squared_error', optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),metrics=['accuracy','mse'])

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM