Почему модель глубокого обучения не сходится на данных по ценам на жилье в Калифорнии? - PullRequest
1 голос
/ 23 июня 2019

Я новичок в области глубокого и машинного обучения в целом. Я пытался работать с набором данных о ценах на жилье в Калифорнии, передавая каждую из 8 функций в пятиуровневую сеть и обучаясь выводу цены. Я использую потери и точность MSE в качестве метрики с 2000 эпохами. Потеря начинается как понятно большая, уменьшается до определенной степени и застревает примерно на одном уровне. Точность равна 0 для всех 2000 эпох.

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

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

train_data = pd.read_csv('./sample_data/california_housing_train.csv', sep=',')
test_data = pd.read_csv('./sample_data/california_housing_test.csv', sep=',')

model = tf.keras.models.Sequential([
  layers.Dense(8),
  layers.Dense(5, activation=tf.nn.relu),  
  layers.Dense(7, activation=tf.nn.relu),  
  layers.Dense(5, activation=tf.nn.relu),
  layers.Dropout(0.2),
  layers.Dense(1)
])

model.compile(optimizer='adam', loss='mean_squared_error', shuffle=True, metrics=['accuracy'])

model.fit(train_data.values[:, 0:8], train_data.values[:, 8], epochs=2000)

выход Output

Ответы [ 2 ]

4 голосов
/ 23 июня 2019

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

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

Пожалуйста, обратитесь к Как использовать метрики для глубокого обучения с Keras в Python или Использование метрик для получения дополнительной информации о том, как реализовать эти показатели производительности.

Надеюсь, это поможет!

4 голосов
/ 23 июня 2019

Точность не является допустимым показателем для проблемы регрессии. Какая функция определяет точность в Керасе, когда потеря представляет собой среднеквадратическую ошибку (MSE)?

Также, пожалуйста, нормализуйте входные данные, используя Min-max или нормализацию по среднеквадратичному значению / единице. Кроме того, диапазон изучаемых выходных данных (порядка 10000) очень велик, поэтому вы можете разделить выходное значение на 10000 (во время прогнозирования вы можете умножить это значение обратно). Эти изменения помогут сети быстрее сходиться. Емкость сети также может потребоваться увеличить.

Различные типы нормализации для числовых данных: https://developers.google.com/machine-learning/data-prep/transform/normalization

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