Проблема классификации нескольких экземпляров Keras - PullRequest
1 голос
/ 23 мая 2019

Я пытаюсь выполнить задачу двоичной классификации для набора данных 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, который не имеет такой же формы выходных данных сети. Но я не уверен, какой слой я должен добавить в сеть, чтобы получить необходимую форму. Можете ли вы помочь?

Заранее спасибо.

1 Ответ

0 голосов
/ 26 мая 2019

Вы можете добавить полностью подключенный слой в вашу сеть.Если выход вашей сети имеет размер B, и вы хотите, чтобы он был размером A, вы можете определить полностью подключенный слой, который будет принимать входные данные размера B и создавать выходные данные размера A. Пожалуйста, смотрите документацию tf.keras.layers.Плотный: https://www.tensorflow.org/api_docs/python/tf/keras/layers/Dense

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...