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

Я пытаюсь построить модель MLP, которая использует набор данных, состоящий из 9 столбцов. это образец (число пациентов, время в миль / сек., нормализация X Y и Z, эксцесс, асимметрия, шаг, крен и рыскание, метка) соответственно.

1,15,-0.248010047716,0.00378335508419,-0.0152548459993,-86.3738760481,0.872322164158,-3.51314800063,0

1,31,-0.248010047716,0.00378335508419,-0.0152548459993,-86.3738760481,0.872322164158,-3.51314800063,0

1,46,-0.267422664673,0.0051143782875,-0.0191247001961,-85.7662354031,1.0928406847,-4.08015176908,0

1,62,-0.267422664673,0.0051143782875,-0.0191247001961,-85.7662354031,1.0928406847,-4.08015176908,0

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

from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
import pandas as pd
import itertools
import math
np.random.seed(7)

train = np.loadtxt("featwithsignalsTRAIN.txt", delimiter=",")
test = np.loadtxt("featwithsignalsTEST.txt", delimiter=",")

x_train = train[:,[2,3,4,5,6,7]]
x_test = test[:,[2,3,4,5,6,7]]
y_train = train[:,8]
y_test = test[:,8]

model = Sequential()
model.add(Dense(500, input_dim=6, activation='relu'))
model.add(Dense(300,  activation='relu'))
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='binary_crossentropy' , optimizer='adam', metrics=['accuracy'])
# Fit the model
batch_size = 128
epochs = 10

hist = model.fit(x_train, y_train,
      batch_size=batch_size,
      epochs=epochs,
      verbose=2,
      )
avg = np.mean(hist.history['acc'])
print('The Average Testing Accuracy is', avg)
##Evaluate the model
score=model.evaluate(x_test, y_test, verbose=2)
print(score)

1 Ответ

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

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

Вот несколько советов:

Вы можете напрямую добавить набор проверки в свой метод подгонки, который будет вычислять одни и те же метрики для этого набора в конце каждой эпохи и позволит вам увидеть, узнает ли ваша модель что-то полезное или просто переобучается на тренировке. установить, не дожидаясь, пока модель закончит обучение. (убедитесь, что вы используете verbose = 1 или 2, чтобы увидеть процесс обучения).

model.fit( ... , validation_data = (x_test , y_test) , ...)

Я вижу, что вы использовали обратный вызов истории. Хорошая практика - видеть, как точность меняется от эпохи к другой, вместо того, чтобы брать среднее значение. Это позволяет вам увидеть, эффективно ли что-то изучает ваша сеть. Сеть редко сходится в первые эпохи.

Есть ли у вас представление о «полезности» вашей функции? Вы можете получить представление об этом, выполнив предварительный анализ перед созданием модели или установив более «обычную» модель (линейная регрессия, деревья решений, случайный лес ...). Настоятельно рекомендуется перед установкой нейронной сети, и это также позволяет сравнивать различные типы моделей и определять, действительно ли вам нужно использовать нейронные сети.

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

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