area = pi * r ^ 2: какую функцию потерь / оптимизатора использовать и почему нижеприведенная функция потерь не предсказывает? - PullRequest
0 голосов
/ 22 апреля 2020

Давая радиус r и площадь круга, я хочу, чтобы NN предсказывал правильные значения. Однако приведенный ниже код не предсказывал. Какие изменения мне нужно внести в функцию потери / оптимизации? Было бы здорово, если бы вы предоставили некоторые причины для выбора функции потери / оптимизации.

from tensorflow import keras
import numpy as np
model = keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])
model.compile(optimizer='sgd', loss='mean_squared_error')
radiusTrainValues = np.array([1.0,2.0,3.0, 4.0, 5.0, 6.0], dtype=float)
areaTrainValues = np.array([3.14159,12.56637, 28.27433,50.26548,78.53982,113.09734], dtype=float)


model.fit(radiusTrainValues, areaTrainValues, epochs=5000)


radiusTestVlues = np.array([7.0,8.0,9.0, 10.0], dtype=float)
areaTestVlues = np.array([153.93804,201.06193,254.469,314.15927], dtype=float)

print("Input    :",radiusTestVlues)
print("CorrectVlues   :",areaTestVlues)
print("TF Predicted:",model.predict(radiusTestVlues))

1 Ответ

1 голос
/ 22 апреля 2020

На самом деле проблема, которая у вас есть, я полагаю, не связана с вашей функцией потери. Поскольку ваша функция потерь является просто индикатором вашей эффективности прогнозирования, оптимизатор просто настроит параметр модели в направлении градиента вашей потери относительно каждого параметра (dLoss / dW). Что здесь происходит, вы хотите использовать NN для приближения функции, которая вычисляет площадь f (r) = Pi * r ^ 2, используя только 1 нейрон, который просто f (r) = (W * r) + B. Простым словом вы пытаетесь аппроксимировать функцию параболы (r ^ 2), используя линейную функцию (W * r + B), поэтому ваша потеря будет уменьшаться до некоторой точки и застревает, потому что это лучшее, что она может сделать, вы можете попробовать нарисовать это вы сами увидите, что между вашей линией и параболой будет огромный разрыв.

Что вы можете сделать, так это увеличить количество слоев и нейронов, вы увидите огромное улучшение.

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