python - 如何向我的 python keras ANN 添加噪声(抖动)以避免过度拟合?
问题描述
我在 Python Keras 中实现了一个人工神经网络模型,我在训练中获得了很高的准确度,但在测试中获得了低准确度。这意味着数据中存在一些过度拟合。
我想避免过度拟合,其中一种技术是抖动或噪声添加。但是,我的问题是:我怎样才能在 Python 中做到这一点?
这是我的ANN代码:
def designANN(input_nodes, dropout, layer_nodes, output_nodes):
classifier = Sequential()
classifier.add(Dense(units = layer_nodes, kernel_initializer = "uniform",
activation = "relu", input_dim = input_nodes))
classifier.add(Dropout(dropout))
classifier.add(Dense(units = layer_nodes, kernel_initializer = "uniform",
activation = "relu"))
classifier.add(Dropout(dropout))
classifier.add(Dense(units = output_nodes, kernel_initializer = "uniform",
activation = "sigmoid"))
classifier.compile(optimizer = "adam", loss = "binary_crossentropy", metrics = [npv])
return classifier
解决方案
你所需要的只是GaussianNoise层。你可以把它放在你的网络中。我建议在激活函数之前使用它。这是 relu 的情况,如果我们添加随机噪声,输出值可能超出范围(<0)
def designANN(input_nodes, dropout, layer_nodes, output_nodes):
classifier = Sequential()
classifier.add(Dense(units = layer_nodes, kernel_initializer = "uniform",
input_dim = input_nodes))
classifier.add(GaussianNoise(0.1))
classifier.add(Activation('relu'))
classifier.add(Dropout(dropout))
classifier.add(Dense(units = layer_nodes, kernel_initializer = "uniform"))
classifier.add(GaussianNoise(0.1))
classifier.add(Activation('relu'))
classifier.add(Dropout(dropout))
classifier.add(Dense(units = output_nodes, kernel_initializer = "uniform",
activation = "sigmoid"))
classifier.compile(optimizer = "adam", loss = "binary_crossentropy", metrics = [npv])
return classifier
推荐阅读
- c# - 如何使用不记名令牌和 API 模块在 EmbedIO 中设置主体
- python - 根据 Python 中项目的深度值创建列表结构
- operators - 如何创建将在 openshift 中使用之前检查 yaml 的操作员?
- nginx - 基于 Nginx 服务器名的代理路由
- php - 使用更少的循环数从给定的 N 个数字中获取连续子集
- java - 使用 ScriptRunner“runScript”方法时,如果一个插入失败则回滚
- javascript - 如果路由以斜线结尾,则找不到 Next.js 页面
- c# - Unity apk 在没有 USB 调试的情况下无法工作
- jquery - 滑块循环和悬停时暂停
- css - CSS 选择器查询