Нейронная сеть, использующая функцию активации ReLU

#python-3.x #tensorflow #keras #neural-network #relu

#python-3.x #Тензорный поток #keras #нейронная сеть #relu

Вопрос:

Я пытаюсь использовать нейронную сеть для прогнозирования цен на дома. Вот как выглядит верхняя часть набора данных:

     Price   Beds    SqFt    Built   Garage  FullBaths   HalfBaths   LotSqFt
    485000  3       2336    2004    2       2.0          1.0        2178.0
    430000  4       2106    2005    2       2.0          1.0        2178.0
    445000  3       1410    1999    1       2.0          0.0        3049.0

...
  

Я пытаюсь использовать функцию активации ReLU, но моя точность равна нулю даже после 100 эпох. Я что-то здесь упускаю?

 X = dataset[:,1:8] #predictor variables
Y = dataset[:,0] #sell price

#Normalize data
from sklearn import preprocessing
X_scale = min_max_scaler.fit_transform(X)
X_scale

#Split Data
from sklearn.model_selection import train_test_split
X_train, X_val_and_test, Y_train, Y_val_and_test = train_test_split(X_scale, Y, test_size=0.3)
X_val, X_test, Y_val, Y_test = train_test_split(X_val_and_test, Y_val_and_test, test_size=0.5)
print(X_train.shape, X_val.shape, X_test.shape, Y_train.shape, Y_val.shape, Y_test.shape)
  
  • Реализовать модель
 from keras.models import Sequential
from keras.layers import Dense

model = Sequential(
    Dense(32, activation='relu', input_shape=(7,)))

model.compile(optimizer='sgd',
              loss='binary_crossentropy',
              metrics=['accuracy'])

hist = model.fit(X_train, Y_train,
          batch_size=32, epochs=100,
          validation_data=(X_val, Y_val))

model.evaluate(X_test, Y_test)[1]
## Output: 3/3 [==============================] - 0s 3ms/step - loss: -5698781.5000 - accuracy: 0.0000e 00
  

Ответ №1:

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

Вам нужно изменить свою модель следующим образом:

 model = Sequential(
    Dense(32, activation='relu', input_shape=(7,)),
    Dense(1, activation='linear'))
  

Кроме того, в вашей model.compile() вы должны изменить свою потерю на « mse » вместо « binary_crossentropy «, поскольку вы выполняете регрессию, а не классификацию.

 model.compile(optimizer='sgd',
              loss='mse',
              metrics=['mean_squared_error'])
  

Ответ №2:

Кроме того, вы решаете проблему возврата,

поэтому вы должны использовать среднее квадратическое значение в качестве функции потерь…

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

Комментарии:

1. другой слой для вывода значения? Как бы я это сделал?

2. Как упоминалось ранее, последним слоем будет tf.keras. Слои. Плотный (1), одно значение в качестве вывода, активация является линейной. также показано в качестве ответа, опубликованного выше Timbus