python - TensorFlow 神经网络不学习
问题描述
我为一个大学项目建立了一个神经网络。目标是找出传感器数据(温度、湿度和光线)是否可以预测日出是否发生在给定的时间范围内。所以,它是一个二元分类。问题是网络不学习。精度收敛到大约 0.8,并且在大约 5 个 epoch 后没有变化。与损失相同,在几个时期后约为 0.4921。我尝试了几件事,例如更改激活函数或隐藏层的数量,但没有任何效果。
我还创建了一个具有等量“sunrise = 1”和“sunrise = 0”数据点的数据集。准确度最终恰好为 0,5。因此,我认为网络设置本身有问题。
你知道有什么问题吗?
这是我的代码:
def build_network():
input = keras.Input(shape=(4,25), name="input")
hidden = layers.Dense(1000, activation="sigmoid", name="dense1")(input)
hidden = layers.Dense(1000, activation="sigmoid", name="dense2")(hidden)
hidden = layers.Flatten()(hidden)
hidden = layers.Dense(500, activation="sigmoid", name="dense3")(hidden)
hidden = layers.Dense(500, activation="sigmoid", name="dense4")(hidden)
hidden = layers.Dense(10, activation="sigmoid", name="dense5")(hidden)
output = layers.Dense(1, activation="sigmoid", name="output")(hidden)
model = keras.Model(inputs=input, outputs=output, name="sunrise_model")
return model
def train_model():
training_files = r'data/training'
test_files = r'data/test'
print('reding files...')
train_x, train_y = load_data(training_files)
test_x, test_y = load_data(test_files)
print("training network")
# compile model
model = build_network()
model.compile(
loss=keras.losses.BinaryCrossentropy(from_logits=False),
optimizer=keras.optimizers.RMSprop(),
metrics=["accuracy"],
)
# Train / fit
model.fit(train_x, train_y, batch_size=100, epochs=200)
# evaluate
test_scores = model.evaluate(test_x, test_y, verbose=2)
print("Test loss:", test_scores[0])
print("Test accuracy:", test_scores[1])
这是输出:损失:0.4921 - 准确度:0.8225
测试损耗:0.4921109309196472,测试精度:0.8225
解决方案
我会使用 RELU 而不是 sigmoid 作为激活函数。你使用的学习率是多少?尝试较小的学习率。实际上,我发现使用可变学习率可以获得最佳结果。Keras 回调 ReduceLROnPlateau 使这很容易做到。文档在这里。我还建议您使用 Keras 回调 ModelCheckpoint 来保存具有最低验证损失的模型,然后使用该模型对测试集进行预测。文档在这里。我也认为你的模型有很多参数并且会过拟合。向模型添加 dropout 层以帮助减少此问题。我会尝试降低模型复杂性作为一个很好的选择。取出具有 1000 个节点的层和具有 500 个节点的层之一,看看你得到了什么结果。我也更喜欢使用 Adamax 优化器。文档在这里。. 使用默认值。
推荐阅读
- flutter - Swift pod 还不能集成为静态库
- amazon-web-services - AWS 证书协会
- python - Anaconda3 安装 - 安装过程中没有错误,但没有出现 anaconda 提示和导航菜单。和_conda.exe
- c++ - LLVM 中的 SIMD 矢量内存负载
- reactjs - React:setState 传递了包含 Map 函数的更新函数未呈现
- flutter - 颤振对话框正在返回旧页面,而不仅仅是关闭垫对话框
- selenium - 如何使用 Selenium 在表中选择不同的行?
- python - 该请求不会从 url1 下载图像,而是从 url2 下载图像。两个网址都在工作
- javascript - mapStateToProps 状态未定义
- java - 无法从 Gradle 应用程序创建胖 jar