Метрики оценки генератора проверки достоверности Keras - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь выполнить двоичную классификацию для набора данных 1D сигналов.Я использую keras 2.2.4 при поддержке tensorflow 1.12.0 для выполнения этой задачи.Мне нужно применить пользовательскую метрику к моим данным проверки, чтобы я создал класс Metrics.Вот основной фрагмент кода, который я использую:

train_gen = load.data_generator(batch_size, preproc, *train)
dev_gen = load.data_generator(batch_size, preproc, *dev)
valid_metrics = Metrics(dev_gen, len(dev[0]) // batch_size, batch_size)
model.fit_generator(train_gen,
      steps_per_epoch=len(train[0]) // batch_size,
      epochs=MAX_EPOCHS,
      validation_data=dev_gen,
      validation_steps=len(dev[0]) // batch_size,
      callbacks=[valid_metrics, checkpointer, reduce_lr, tensorboard])


class Metrics(keras.callbacks.Callback):
    def __init__(self, val_data, step, batch_size=20):
        self.validation_data = val_data
        self.batch_size = batch_size
        self.validation_step = step
        print('validation_step  ' + str(step))

    def on_train_begin(self, logs={}):
        self._rocdata_perclass = []
        self._prdata_perclass = []
        self._accdata = []

    def on_epoch_end(self, batch, logs={}):

        for batch_index in range(self.validation_step):
            xVal, yVal = next(self.validation_data)
            predictions = self.model.predict(xVal)
            print(predictions.shape)
            print(yVal.shape)

****** Training output*****
1/12 [=>............................] - ETA: 2:27 - loss: 1.1788 - acc: 0.5113
 x shape (16, 38400, 1)
 y shape (16, 150, 2)
 2/12 [====>.........................] - ETA: 1:11 - loss: 2.1305 - acc: 0.4668 
 x shape (16, 38144, 1)
 y shape (16, 149, 2)
 3/12 [======>.......................] - ETA: 44s - loss: 2.0981 - acc: 0.4302
 x shape (16, 38400, 1)
 y shape (16, 150, 2)
 4/12 [=========>....................] - ETA: 30s - loss: 1.8517 - acc: 0.3823 
 x shape (16, 38400, 1)
 y shape (16, 150, 2)
 5/12 [===========>..................] - ETA: 21s - loss: 1.6540 - acc: 0.4184
 x shape (16, 38144, 1)
 y shape (16, 149, 2)
 6/12 [==============>...............] - ETA: 16s - loss: 1.5060 - acc: 0.4350
 x shape (16, 38912, 1)
 y shape (16, 152, 2)
 7/12 [================>.............] - ETA: 12s - loss: 1.4447 - acc: 0.3977
 x shape (16, 38400, 1)
 y shape (16, 150, 2)
 8/12 [===================>..........] - ETA: 8s - loss: 1.3394 - acc: 0.4423
 x shape (16, 41472, 1)
 y shape (16, 162, 2)
 9/12 [=====================>........] - ETA: 6s - loss: 1.2576 - acc: 0.4718
 x shape (16, 37888, 1)
 y shape (16, 148, 2)
10/12 [========================>.....] - ETA: 3s - loss: 1.1878 - acc: 0.5138
 x shape (16, 39424, 1)
 y shape (16, 154, 2)
11/12 [==========================>...] - ETA: 1s - loss: 1.1355 - acc: 0.5395
 x shape (16, 39168, 1)
 y shape (16, 153, 2)

Как видно из результатов обучения, приведенного выше, форма каждого пакетного ввода (x) и выхода (y) отличается отдруг друга, потому что я дополняю данные, чтобы иметь одинаковую длину.Один сигнал имеет n classes of dimension 2.Мой вопрос связан с оценкой, которую мне нужно провести для данных проверки с использованием класса Metrics.Поскольку у меня также есть разные формы ввода и вывода для каждого пакета для проверки, как я могу оценить все данные проверки за один раз, используя Площадь под кривой ROC?Как вы можете видеть из приведенного выше кода, я могу использовать только пакеты проверки, тогда как мне нужны все данные проверки, чтобы я мог оценить их один раз.

******* Validation Metric output ********
x shape (16, 41984, 1)
y shape (16, 164, 2)
x shape (16, 38400, 1)
y shape (16, 150, 2)

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

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