Модель нейронной сети с питоном keras - PullRequest
0 голосов
/ 13 мая 2018

У меня вопрос по поводу моей модели NN. Я использую керас из питона. Мой тренинг состоит из 1000 образцов, каждый из которых содержит 4320 функций. Есть 10 категорий, и мой Y содержит множество массивов из 10 элементов с 0 на всех позициях, кроме одной.

Однако, мой NN не учится с первой эпохи, и я, вероятно, ошибаюсь в моей модели, это моя первая попытка построить модель NN, и я, должно быть, ошибся в нескольких вещах.

Epoch 1/150
1000/1000 [==============================] - 40s 40ms/step - loss: 6.7110 - acc: 0.5796
Epoch 2/150
1000/1000 [==============================] - 39s 39ms/step - loss: 6.7063 - acc: 0.5800
Epoch 3/150
1000/1000 [==============================] - 38s 38ms/step - loss: 6.7063 - acc: 0.5800
Epoch 4/150
1000/1000 [==============================] - 39s 39ms/step - loss: 6.7063 - acc: 0.5800
Epoch 5/150
1000/1000 [==============================] - 38s 38ms/step - loss: 6.7063 - acc: 0.5800
Epoch 6/150
1000/1000 [==============================] - 38s 38ms/step - loss: 6.7063 - acc: 0.5800
Epoch 7/150
1000/1000 [==============================] - 40s 40ms/step - loss: 6.7063 - acc: 0.5800
Epoch 8/150
1000/1000 [==============================] - 39s 39ms/step - loss: 6.7063 - acc: 0.5800
Epoch 9/150
1000/1000 [==============================] - 40s 40ms/step - loss: 6.7063 - acc: 0.5800

И это часть моего NN-кода:

model = Sequential()
model.add(Dense(4320, input_dim=4320, activation='relu'))
model.add(Dense(50, activation='relu'))
model.add(Dense(10, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, Y, epochs=150, batch_size=10)

Итак, мой X - это массив Numey длины 1000, который содержит другие массивы Numpy из 4320 элементов. My Y - это массив numey длиной 1000, который содержит другие массивы numey из 10 элементов (категорий).

Я что-то не так делаю или просто не могу учиться на основе этого тренировочного набора? (На 1NN с манхэттенским расстоянием я получаю ~ 80% точности в этом тренировочном наборе)

Л.Е .: После того, как я нормализовал данные, это вывод моих первых 10 эпох:

Epoch 1/150
1000/1000 [==============================] - 41s 41ms/step - loss: 7.9834 - acc: 0.4360
Epoch 2/150
1000/1000 [==============================] - 41s 41ms/step - loss: 7.2943 - acc: 0.5080
Epoch 3/150
1000/1000 [==============================] - 39s 39ms/step - loss: 9.0326 - acc: 0.4070
Epoch 4/150
1000/1000 [==============================] - 39s 39ms/step - loss: 8.7106 - acc: 0.4320
Epoch 5/150
1000/1000 [==============================] - 40s 40ms/step - loss: 7.7547 - acc: 0.4900
Epoch 6/150
1000/1000 [==============================] - 44s 44ms/step - loss: 7.2591 - acc: 0.5270
Epoch 7/150
1000/1000 [==============================] - 42s 42ms/step - loss: 8.5002 - acc: 0.4560
Epoch 8/150
1000/1000 [==============================] - 41s 41ms/step - loss: 9.9525 - acc: 0.3720
Epoch 9/150
1000/1000 [==============================] - 40s 40ms/step - loss: 9.7160 - acc: 0.3920
Epoch 10/150
1000/1000 [==============================] - 39s 39ms/step - loss: 9.3523 - acc: 0.4140

Похоже, что он начинает колебаться, так что, кажется, хорошо

1 Ответ

0 голосов
/ 14 мая 2018

Похоже, что ваши категории, классы являются взаимоисключающими, поскольку ваши целевые массивы закодированы в одно касание (т.е. вам никогда не придется предсказывать 2 класса одновременно).В этом случае вы должны использовать softmax на вашем последнем слое, чтобы создать распределение и обучиться, используя categorical_crossentropy.На самом деле вы можете просто установить свои цели как Y = [2,4,0,1] в качестве индексов своей категории и потренироваться с sparse_categorical_crossentropy, что сэкономит вам время на создание массива 2 фигур (сэмплов, 10).

Кажется, чтоу вас много функций, скорее всего, производительность вашей сети будет зависеть от того, как вы предварительно обработаете свои данные.Для непрерывных входов целесообразно нормализовать их, а для дискретных входов закодировать их как горячие, чтобы помочь обучению.

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