当前位置: 首页 > 面试题库 >

如何在训练过程中添加具有不同std的高斯噪声?

柳经纶
2023-03-14
问题内容

我正在使用keras和tensorflow训练CNN。我想在训练期间将高斯噪声添加到我的输入数据中,并在以后的步骤中降低噪声的百分比。我现在使用的是:

from tensorflow.python.keras.layers import Input, GaussianNoise, BatchNormalization
inputs = Input(shape=x_train_n.shape[1:])
bn0 = BatchNormalization(axis=1, scale=True)(inputs)
g0 = GaussianNoise(0.5)(bn0)

GaussianNoise所采用的变量是噪声分布的标准偏差,我无法为其分配动态值,如何添加例如噪声,然后根据自己所处的时期减小该值?


问题答案:

您可以简单地设计一个自定义callback,以更改stddev某个时期的训练前的习惯。

参考:

https://www.tensorflow.org/api_docs/python/tf/keras/layers/GaussianNoise

https://www.tensorflow.org/guide/keras/custom_callback

from tensorflow.keras.layers import Input, Dense, Add, Activation
from tensorflow.keras.models import Model
import tensorflow as tf
import numpy as np
import random


from tensorflow.python.keras.layers import Input, GaussianNoise, BatchNormalization
inputs = Input(shape=100)
bn0 = BatchNormalization(axis=1, scale=True)(inputs)
g0 = GaussianNoise(0.5)(bn0) 
d0 = Dense(10)(g0)
model = Model(inputs, d0)

model.compile('adam', 'mse')
model.summary()


class MyCustomCallback(tf.keras.callbacks.Callback):

  def on_epoch_begin(self, epoch, logs=None):
    self.model.layers[2].stddev = random.uniform(0, 1)
    print('updating sttdev in training')
    print(self.model.layers[2].stddev)


X_train = np.zeros((10,100))
y_train = np.zeros((10,10))

noise_change = MyCustomCallback()
model.fit(X_train, 
          y_train, 
          batch_size=32, 
          epochs=5, 
          callbacks = [noise_change])




Model: "model_5"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_6 (InputLayer)         [(None, 100)]             0         
_________________________________________________________________
batch_normalization_5 (Batch (None, 100)               400       
_________________________________________________________________
gaussian_noise_5 (GaussianNo (None, 100)               0         
_________________________________________________________________
dense_5 (Dense)              (None, 10)                1010      
=================================================================
Total params: 1,410
Trainable params: 1,210
Non-trainable params: 200
_________________________________________________________________
Epoch 1/5
updating sttdev in training
0.984045691131548
1/1 [==============================] - 0s 1ms/step - loss: 1.6031
Epoch 2/5
updating sttdev in training
0.02821459469022025
1/1 [==============================] - 0s 742us/step - loss: 1.5966
Epoch 3/5
updating sttdev in training
0.6102984511769268
1/1 [==============================] - 0s 1ms/step - loss: 1.8818
Epoch 4/5
updating sttdev in training
0.021155188690323512
1/1 [==============================] - 0s 1ms/step - loss: 1.2032
Epoch 5/5
updating sttdev in training
0.35950227285165115
1/1 [==============================] - 0s 2ms/step - loss: 1.8817

<tensorflow.python.keras.callbacks.History at 0x7fc67ce9e668>


 类似资料:
  • 问题内容: 我想知道在带有OpenCV的Python或任何其他向图像添加高斯噪声或椒盐噪声的python图像处理库中是否存在某些函数?例如,在MATLAB中,存在直接功能可以完成相同的工作。 或者,如何使用带有OpenCV的Python向图像添加噪点? 问题答案: 该功能会在图像中添加高斯,椒盐,泊松和斑点噪声

  • 我试图写一个程序,将消除噪声从一个高斯滤波器的图像。我试图编写以下代码: 但我并没有消除噪声,反而使图像变暗了。我做错了什么? 高斯噪声是具有等于正态分布概率密度的概率密度的统计噪声,也称为高斯。换句话说,这种噪声的值具有高斯分布。以卡尔·高斯的名字命名。 一个特例是高斯白噪声,那么在任何给定时间的值都是独立的且均匀分布的随机变量(这意味着它们在一起不相关)。在对通信信道进行测试建模时,将高斯噪声

  • 问题内容: 我想知道是否有可能保存经过部分训练的Keras模型并在再次加载模型后继续进行训练。 这样做的原因是,将来我将拥有更多的训练数据,并且我不想再次对整个模型进行训练。 我正在使用的功能是: 编辑1:添加了完全正常的示例 对于10个纪元后的第一个数据集,最后一个纪元的损失将为0.0748,精度为0.9863。 保存,删除和重新加载模型后,第二个数据集上训练的模型的损失和准确性分别为0.171

  • 高斯过程 介绍 我们在本课程上半部分讨论的许多经典机器学习算法都符合以下模式:给定一组从未知分布中采样的独立同分布的示例训练样本集: 求解一个凸优化问题,以确定数据单一的“最佳拟合”模型,并 使用这个估计模型对未来的测试输入点做出“最佳猜测”的预测。 在本节的笔记中,我们将讨论一种不同的学习算法,称为贝叶斯方法。 与经典的学习算法不同,贝叶斯算法并不试图识别数据的“最佳匹配”模型(或者类似地,对新

  • 校验者: @glassy @Trembleguy 翻译者: @AI追寻者 高斯过程 (GP) 是一种常用的监督学习方法,旨在解决回归问题和概率分类问题。 高斯过程模型的优点如下: 预测内插了观察结果(至少对于正则核)。 预测结果是概率形式的(高斯形式的)。这样的话, 人们可以计算得到经验置信区间并且据此来判断是否需要修改(在线拟合,自适应) 在一些区域的预测值。 通用性: 可以指定不同的:ref

  • 我一直在尝试与斯坦福核心NLP合作。我希望训练我自己的NER模型。从论坛上的SO和官网上描述了如何使用一个属性文件来实现这一点。我将如何通过API实现它?。 怎么做