Странный вывод для регрессионной модели керас - PullRequest
0 голосов
/ 05 ноября 2018

Данные

Я только начал делать регрессионную модель в Керасе. Я попробовал свои собственные фотографии, но я получил потерю как Nan и нулевую точность как вывод. Кто-нибудь может объяснить, почему?

data=pd.read_excel('Data.xlsx',sheet_name=2)
data.head(2)
features=data.drop('PRHP',axis=1)
labels=data['PRHP']
# Normalizing data:
m_features=features.mean(axis=0)
m_labels=labels.mean(axis=0)
std_features=features.std(axis=0)
std_labels=labels.std(axis=0)
nor_features=(features-m_features)/std_features
nor_labels=(labels-m_labels)/std_labels
# Build Model:
model=Sequential([Dense(12,input_shape=(7,),activation='linear'),Dense(1,activation='linear')])
model.summary()
model.compile(adam(lr=0.01),loss='mean_squared_error',metrics=['accuracy'])
model.fit(nor_features,nor_labels, batch_size=10, epochs=10, shuffle=True,verbose=2)

Выход:

Epoch 1/10
 - 0s - loss: nan - acc: 0.0000e+00
Epoch 2/10
 - 0s - loss: nan - acc: 0.0000e+00
Epoch 3/10
 - 0s - loss: nan - acc: 0.0000e+00
Epoch 4/10
 - 0s - loss: nan - acc: 0.0000e+00
...

1 Ответ

0 голосов
/ 05 ноября 2018

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

nor_features = (features-m_features) / (std_features + 1e-7)
nor_labels = (labels-m_labels) / (std_labels + 1e-7)

Что касается точности равной нулю, вы должны иметь в виду, что метрика 'accuracy' в Керасе используется только для задач классификации. Здесь, поскольку вы выполняете регрессию, вообще не имеет смысла использовать 'accuracy' в качестве метрики. Вместо этого вы можете использовать другие метрики, такие как mae (т. Е. Означать абсолютную ошибку), или вообще не использовать метрики.

...