Эвристическая модель построения модели RNN - InvalidArgumentError - PullRequest
0 голосов
/ 07 марта 2020

Я пытаюсь обучить рекуррентную сеть, которая сделает категоричный прогноз в одной из трех категорий. Я пытаюсь адаптировать некоторый предыдущий код, который работал для предсказания между двумя категориями. Чтобы сделать это, я просто изменил последний слой Dense (), чтобы он имел форму 3, а не 2, и оставил все остальное по существу тем же.

Однако, когда я запускаю приведенный ниже код, я получаю ошибка:

InvalidArgumentError:  Received a label value of -9223372036854775808 which is outside the valid
range of [0, 3).  Label values:
0 0 0 0 1 1 0 -9223372036854775808 1 1 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 1 0 1 0 1

Я не совсем понимаю, откуда взялись эти цифры, и я был бы очень признателен, если бы кто-нибудь смог их объяснить? В частности, я не смог выяснить, что означает предупреждение под «значениями меток».

Как правило, я не думаю, что можно найти много подробных статей о стековом потоке или где-либо еще о том, как проектировать сети, предназначенные для начинающих - я новичок в использовании Keras, но мой опыт в математике, поэтому учебники, которые пропускают математику того, что происходит в слоях, я не нашел особенно полезным. Если бы кто-то мог указать мне на хороший источник для дизайна слоя, который имеет более математический подход, который принес бы огромную пользу?

Кроме того, все входные данные были нормализованы, хотя одна из категорий была между [-1 , 1], а не [0,1]; Я не понимаю, почему это может быть проблемой, но, возможно, это так.

def Network(IN, OUT, TIME_PERIOD, EPOCHS, BATCH_SIZE, LTSM_SHAPE):

    length = len(OUT)
    train_x = IN[:int(0.9 * length)]
    validation_x = IN[int(0.9 * length):]
    train_y = OUT[:int(0.9 * length)]
    validation_y = OUT[int(0.9 * length):]

    model = Sequential()

    model.add(LSTM(LTSM_SHAPE, input_shape=(train_x.shape[1:]), return_sequences=True))
    model.add(Dropout(0.2))
    model.add(BatchNormalization())  

    model.add(LSTM(LTSM_SHAPE, return_sequences=True))
    model.add(Dropout(0.2))
    model.add(BatchNormalization())

    model.add(LSTM(LTSM_SHAPE, return_sequences=True))
    model.add(Dropout(0.2))
    model.add(BatchNormalization())

    model.add(Dense(3, activation='softmax'))
    model.add(Dense(1))

    opt = tf.keras.optimizers.Adam()
    model.compile(loss='sparse_categorical_crossentropy', optimizer=opt, metrics=['accuracy'])

    train_y = np.asarray(train_y)
    validation_y = np.asarray(validation_y)
    history = model.fit(train_x, train_y, batch_size=BATCH_SIZE, epochs=EPOCHS, validation_data=(validation_x, validation_y))
    print('\nhistory dict:', history.history)

    # Score model
    score = model.evaluate(validation_x, validation_y, verbose=0)
    print('Test loss:', score[0])
    print('Test accuracy:', score[1])
    # Save model
    model.save(f"models/{NAME}")

EPOCHS, BATCH_SIZE, LTSM_SHAPE = 15, 32, 128

Network(x, Y, 3, EPOCHS, BATCH_SIZE, LTSM_SHAPE)


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