Я пытаюсь выполнить задачу двоичной классификации для набора данных 1D сигналов. Вот входные формы обучающей партии x
и партии истинной гордости y
. Другими словами, у меня есть 16 сигналов с 38400 временными шагами и 1 функцией на временной шаг для каждой партии. Каждый сигнал классифицируется в 150 раз одного класса (вид проблемы обучения нескольких экземпляров).
х форма (16, 38400, 1)
y форма (16, 150, 1)
Вот сеть, которую я использую до сих пор:
model = Sequential()
model.add(LSTM(2, return_sequences=True, input_shape=params['input_shape'], dropout=0.5))
model.add(TimeDistributed(Dense(params["num_categories"])))
model.add(Activation('softmax' if params['num_categories'] != 1 else 'sigmoid'))
from keras.optimizers import Adam
optimizer = Adam(lr=params['learning_rate'], clipnorm=params.get("clipnorm", 1))
model.compile(loss='binary_crossentropy', optimizer=optimizer, metrics=['accuracy'])
return model
Обратите внимание, что params['input_shape']
равно [:, :, None]
. Вот выходные формы сетевых слоев при запуске кода:
Tensor("lstm_1/transpose_1:0", shape=(?, ?, 2), dtype=float32) : (1, 38400, 2)
Tensor("time_distributed_1/Reshape_1:0", shape=(?, ?, 1), dtype=float32) : (1, 38400, 1)
Tensor("activation_1/Sigmoid:0", shape=(?, ?, 1), dtype=float32) : (1, 38400, 1)
Проблема в том, что мы получаем эту ошибку:
tensorflow.python.framework.errors_impl.InvalidArgumentError: Incompatible shapes: [4,150,1] vs. [4,38400,1]
[[{{node metrics/acc/Equal}} = Equal[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:GPU:0"](_arg_activation_1_target_0_1/_65, metrics/acc/Round)]]
[[{{node metrics/auroc/auc/assert_greater_equal/Assert/AssertGuard/Assert/Switch_2/_93}} = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_1152_...t/Switch_2", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]
Я знаю, что эта ошибка связана с y
, который не имеет такой же формы выходных данных сети. Но я не уверен, какой слой я должен добавить в сеть, чтобы получить необходимую форму. Можете ли вы помочь?
Заранее спасибо.