Как применить классификацию к данным серии в Керасе? - PullRequest
0 голосов
/ 28 апреля 2018

Структура моих входных данных:

print(df.col)
0    [262, 330, 392, 522, 784, 0, 0]
1    [262, 290, 330, 392, 522, 784, 0]
2    [262, 330, 392, 522, 784, 0, 0]
3    [250, 262, 330, 392, 522, 784, 0]
4    [262, 290, 306, 330, 392, 784, 0]
.
.
.

У меня были данные переменного размера, поэтому я добавил в конце отступы 0, чтобы исправить форму входных данных.

Выходной столбец:

print(df.predict)

array([[0., 0., 0., 1.],
       [1., 0., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 1., 0.],
       [0., 0., 1., 0.],
       [0., 1., 0., 0.],...])

Выход имеет один горячий код.

Вот моя модель:

model = Sequential()
model.add(Dense(7, activation='relu', input_dim = 7))
model.add(Dense(10, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(4))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# Fit the model
model.fit(X_train, y_train, epochs=500, batch_size=10,  verbose=2)

Точность и потери становятся постоянными после 2-3 эпох.

Epoch 1/500
0s - loss: 5.8413 - acc: 0.1754
Epoch 2/500
0s - loss: 5.7398 - acc: 0.1754
Epoch 3/500
0s - loss: 5.7190 - acc: 0.1754
Epoch 4/500
0s - loss: 5.6885 - acc: 0.1754
Epoch 5/500
0s - loss: 5.6650 - acc: 0.1754
Epoch 6/500
0s - loss: 5.6403 - acc: 0.1754
Epoch 7/500
0s - loss: 5.6164 - acc: 0.2456
Epoch 8/500
0s - loss: 5.5900 - acc: 0.2456
Epoch 9/500
0s - loss: 5.5730 - acc: 0.2456
...
0s - loss: 5.3727 - acc: 0.1754
Epoch 499/500
0s - loss: 5.3727 - acc: 0.1754
Epoch 500/500
0s - loss: 5.3727 - acc: 0.1754

У меня есть 72 точки данных и 4 класса (около 18 образцов для каждого класса) Данные довольно просты. Почему точность такая низкая?

Модель разработана правильно? Я новичок в ML и Keras. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 28 апреля 2018

Попробуйте это model.add(layers.Dense(4, activation = 'softmax')) как последний слой.

Если у вас есть более 2 классов для классификации, вам понадобится слой softmax в конце. Это функция, которая выводит вероятности для 4 различных классов (все добавляют к 1), и класс с наибольшей вероятностью будет вашим классом. Таким образом, ваша сеть сможет выучить все 4 разных класса вместо двух.

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