Как создать нейронную сеть с 35 входами и 1 выходом? - PullRequest
0 голосов
/ 03 мая 2020

Я новичок в машинном обучении. Я использую Keras для построения следующей нейронной сети для двоичной классификации: image

Поэтому мне нужен вход 35x10 и 1 двоичный выход. А также я хочу тренировать модель по 1 точке данных за раз. Вот код, который я пытаюсь запустить:

from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.layers.normalization import BatchNormalization

model_online_1 = Sequential()
model_online_1.add(BatchNormalization(input_shape=tuple([grouped_X_train.shape[1]])))
model_online_1.add(Dense(35, batch_size=35, input_dim=10))
model_online_1.add(Activation('relu'))
model_online_1.add(Dropout(0.2))
model_online_1.add(Dense(35))
model_online_1.add(Activation('relu'))
model_online_1.add(Dropout(0.2))
model_online_1.add(Dense(1))
model_online_1.add(Activation('softmax'))
model_online_1.compile(loss='categorical_crossentropy', optimizer='adam')

batch_size = 1
nb_classes = 2
nb_epoch = 1

for i in range(no_of_samples):
    # train on ith data point
    model_online_1.fit(grouped_X_train[i].T, [grouped_Y1_train[i]],
                       batch_size, nb_epoch,
                        verbose=0)

И во время установки я получаю ошибку:

Traceback (most recent call last):
  File "/home/natalia/PycharmProjects/raw_recognition/classification.py", line 139, in <module>
    verbose=0)
  File "/home/natalia/.local/lib/python3.6/site-packages/keras/engine/training.py", line 1154, in fit
    batch_size=batch_size)
  File "/home/natalia/.local/lib/python3.6/site-packages/keras/engine/training.py", line 637, in _standardize_user_data
    training_utils.check_array_length_consistency(x, y, sample_weights)
  File "/home/natalia/.local/lib/python3.6/site-packages/keras/engine/training_utils.py", line 244, in check_array_length_consistency
    'and ' + str(list(set_y)[0]) + ' target samples.')
ValueError: Input arrays should have the same number of samples as target arrays. Found 10 input samples and 1 target samples.

Process finished with exit code 1

Что не так с моделью? Последний плотный слой должен вернуть 1 вывод, или я неправильно понял это?

Обновление: Grouped_X_train.shape: (26, 35, 10) Grouped_Y1_train.shape: (26,)

1 Ответ

0 голосов
/ 03 мая 2020
  1. Ваша форма ввода неверна. Должно быть (35, 10)

model_online_1.add(BatchNormalization(input_shape=(35,10)))

Это необычный выбор - использовать BatchNorm на первом слое.

Вы снова указываете input_dim и batch_size во втором плотном слое, что является еще одной проблемой. Как вы составляете эти несуществующие параметры?

model_online_1.add(Dense(35))

Ваш последний слой должен быть sigmoid, а не softmax.

model_online_1.add(Activation('sigmoid'))

Ваша потеря должна быть binary_crossentropy

model_online_1.compile(loss='binary_crossentropy', optimizer='adam')

  • Примечание: я предполагаю, что это проблема двоичной классификации.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...