additive Gaussian noise in Tensorflow

17,734

To dynamically get the shape of a tensor with unknown dimensions you need to use tf.shape()

For instance

import tensorflow as tf
import numpy as np


def gaussian_noise_layer(input_layer, std):
    noise = tf.random_normal(shape=tf.shape(input_layer), mean=0.0, stddev=std, dtype=tf.float32) 
    return input_layer + noise


inp = tf.placeholder(tf.float32, shape=[None, 8], name='input')
noise = gaussian_noise_layer(inp, .2)
noise.eval(session=tf.Session(), feed_dict={inp: np.zeros((4, 8))})
Share:
17,734
Deeplearningmaniac
Author by

Deeplearningmaniac

Updated on June 04, 2022

Comments

  • Deeplearningmaniac
    Deeplearningmaniac almost 2 years

    I'm trying to add Gaussian noise to a layer of my network in the following way.

    def Gaussian_noise_layer(input_layer, std):
        noise = tf.random_normal(shape = input_layer.get_shape(), mean = 0.0, stddev = std, dtype = tf.float32) 
        return input_layer + noise
    

    I'm getting the error:

    ValueError: Cannot convert a partially known TensorShape to a Tensor: (?, 2600, 2000, 1)

    My minibatches need to be of different sizes sometimes, so the size of the input_layer tensor will not be known until the execution time.

    If I understand correctly, someone answering Cannot convert a partially converted tensor in TensorFlow suggested to set shape to tf.shape(input_layer). However then, when I try to apply a convolutional layer to that noisy layer I get another error:

    ValueError: dims of shape must be known but is None

    What is the correct way of achieving my goal of adding Gaussian noise to the input layer of a shape unknown until the execution time?

  • Zaccharie Ramzi
    Zaccharie Ramzi over 4 years
    in tensorflow 2.0.0, you need to replace tf.random_normal by tf.random.normal.