python-3.x - 使用 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 个 epoch 之后我的准确度也为零。我在这里错过了什么吗?
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
解决方案
您的准确度为 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'])
推荐阅读
- python - Pandas 中的 .dropna() 问题
- ruby-on-rails - 在不知道文件名的情况下在 rails 公共目录中派生文件的自动化方法
- c# - 如何在 Web 浏览器控件中单击单独的网页元素
- mysql - 如何为 Spring 和 MySql 设置 Kubernetes
- postgresql - 将 postgres 分区添加到现有表
- ffmpeg - 使用 NVENC 的 FFmpeg GPU 10 位 HEVC 编码
- javascript - 当用户错误地将完整的电子邮件地址包含为用户名时,想要从输入中删除“@email.com”
- azure - 使用用户名和密码写入 Azure Blob
- java - 无法使用 MappedByteBuffer 读取块中的文件
- c++ - 在 C++ 中删除尾随逗号