python - 定义将随机值添加到展平层输出的 Keras 自定义层
问题描述
如何定义 Keras 自定义层以向大小为(无,100)的 Flatten 层(CNN)的输出添加随机值?
解决方案
TL;博士:
class Noise(keras.layers.Layer):
def __init__(self, mean=0, stddev=1.0, *args, **kwargs):
super(Noise, self).__init__(*args, **kwargs)
self.mean = mean
self.stddev = stddev
def call(self, inputs,
training=False # Only add noise in training!
):
if training:
return inputs + tf.random.normal(
inputs.shape,
mean=self.mean,
stddev=self.stddev
) # Add random noise during training
else:
return inputs + tf.fill(
inputs.shape,
self.mean
) # Add mean of random noise during inference
model = keras.Sequential([
layers.Flatten(input_shape=(10,10,1)),
Noise(stddev=.1)
])
model(input_batch,
training=True # Defaults to False.
# Noise is added only in training mode.
)
还有一个内置层可以做与我上面keras.layers.GaussianNoise
完全相同的事情。Noise
实现上述代码时要记住的几个注意事项:
- 如果您打算使用随机噪声作为正则化器来对抗过度拟合,那么使用 keras 的内置图像增强模块要好得多。
- 在处理 CNN 时避免使用非正态分布。例如,使用均匀分布将改变批次的平均值,否定 CNN迫切需要的所有图像归一化。
- 如果将 flatten 的结果输入到顶部的密集分类器中,请考虑使用 dropout。Dropout 在您可能尝试做的事情上效率更高。
对于任何澄清,请不要犹豫发表评论!干杯。
推荐阅读
- awk - 如何计算空单元格之间的值
- r - Fuzzywuzzy 模块中的网状 R 包错误
- c# - 在wpf中,如果父元素启用为false,如何使一个子元素为true?
- php - 如何在 Gloudemans Shoppingcart 中添加图像参数
- r - 为什么可以使用 unlist() 函数?(内例)
- java - spring clound eureka 服务器依赖项错误 gradle intellij
- reactjs - 无法访问子组件中更新的 localStorage (React)
- node.js - 如何输入 Fastify 回复有效载荷?
- typescript - 导入 IReact 类型定义
- react-native - Expo本地身份验证指纹传感器在IOS中不起作用