Оптимизация нейронной сети Keras Regressor - PullRequest
0 голосов
/ 19 февраля 2019

Я создал модель регрессора keras для прогнозирования концентрации нитратов по нескольким признакам земного покрова.Однако я не уверен, как интерпретировать следующие результаты:

  • потеря: 0,0517
  • mean_squared_error: 0,0517
  • mean_absolute_error: 0,1988
  • val_loss: 0.0357
  • val_mean_squared_error: 0.0357
  • val_mean_absolute_error: 0.1416

Достаточны ли эти значения после 1000 эпох и что они говорят об этой модели (значимой или нет)?Я новичок в кодировании.

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import MinMaxScaler
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense
from tensorflow.python.keras.wrappers.scikit_learn import KerasRegressor
seed = 7
np.random.seed(seed)

dataset=np.loadtxt("N_LANDCOV.csv", delimiter=",")
x=dataset[:,:-1]
y=dataset[:,-1]
y=np.reshape(y, (-1,1))
scaler = MinMaxScaler()
print(scaler.fit(x))
print(scaler.fit(y))
xscale=scaler.transform(x)
yscale=scaler.transform(y)

X_train, X_test, y_train, y_test = train_test_split(xscale, yscale)
model = Sequential()
model.add(Dense(28, input_dim=12, kernel_initializer='normal', activation='relu'))
model.add(Dense(16, activation='relu'))
model.add(Dense(1, activation='linear'))
model.summary()
model.compile(loss='mse', optimizer='adam', metrics=['mse','mae'])
history = model.fit(X_train, y_train, epochs=1000, batch_size=10,  verbose=1, validation_split=0.33)

Epoch 1000/1000
30/30 [==============================] - 0s 702us/step - loss: 0.0517 - mean_squared_error: 0.0517 - mean_absolute_error: 0.1988 - val_loss: 0.0357 - val_mean_squared_error: 0.0357 - val_mean_absolute_error: 0.1416

import os
os.environ['KMP_DUPLICATE_LIB_OK']='True'

print(history.history.keys())
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'validation'], loc='upper left')
plt.show()
plt.figure(figsize=(200, 200))

потери против графика эпохи

1 Ответ

0 голосов
/ 20 февраля 2019

Я бы посоветовал вам получить больше данных для вашей модели.Как справедливо сказал @PJRobot, слишком большое пространство поиска с меньшим количеством выборок данных.

Вы также можете выполнить некоторую предварительную обработку, чтобы уменьшить размеры для анализа (если это возможно с доступными функциями).Но попробуйте получить больше данных, прежде чем применять Neural Network Regressor.Также попробуйте изменить metric на 'accuracy', если вы не можете понять свои текущие результаты метрик (это просто значения потерь).

Я использовал accuracy в мои ранние дни глубокого обучения, чтобы понять мои возможности модели. (Это была классификация) Также в регрессии старайтесь придерживаться метрик ошибок, поскольку это дает более заметные выводы.

Также попробуйте некоторую настройку гиперпараметров для лучших результатов.

Счастливое обучение.

...