Problem implementing straight through estimator in tensorflow

Viewed 1264

I want to implement a straight through estimator in tensorflow. I am using tf.stop_gradient() method for this. When I implement in the inner layers it works fine but when used on the last layer it throws an error. Below are my code and error.

def generator():
    model = Sequential([
        Embedding(21, 100, input_shape = (50, )),
        Conv1D(100, 3,2, padding = "same", activation = "relu"),
        Conv1D(100, 3,2, padding = "same", activation = "relu"),
        Conv1D(21, 3,1, padding = "same", activation = "relu"),
        Flatten(),
        Dense(1,"sigmoid", trainable = False),
        Lambda(lambda x: tf.stop_gradient(x)),                
  ])
  return model

gen = generator()

def dis_inputs():
  ind = np.random.randint(0, len(x_train), batch_size * 2)
  real = x_train[ind]
  out = np.ones((batch_size * 2, )) 
  out[: batch_size ] = 0
  return real, out

batch_size = 128
x, y = dis_inputs()

gen.compile("adam", "binary_crossentropy")
gen.fit(x, y, epochs = 100)

ValueError: in user code:

File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 878, in train_function  *
    return step_function(self, iterator)
File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 867, in step_function  **
    outputs = model.distribute_strategy.run(run_step, args=(data,))
File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 860, in run_step  **
    outputs = model.train_step(data)
File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 816, in train_step
    self.optimizer.minimize(loss, self.trainable_variables, tape=tape)
File "/usr/local/lib/python3.7/dist-packages/keras/optimizer_v2/optimizer_v2.py", line 532, in minimize
    return self.apply_gradients(grads_and_vars, name=name)
File "/usr/local/lib/python3.7/dist-packages/keras/optimizer_v2/optimizer_v2.py", line 633, in apply_gradients
    grads_and_vars = optimizer_utils.filter_empty_gradients(grads_and_vars)
File "/usr/local/lib/python3.7/dist-packages/keras/optimizer_v2/utils.py", line 73, in filter_empty_gradients
    raise ValueError(f"No gradients provided for any variable: {variable}. "

ValueError: No gradients provided for any variable: (['embedding_4/embeddings:0', 'conv1d_12/kernel:0', 'conv1d_12/bias:0', 'conv1d_13/kernel:0', 'conv1d_13/bias:0', 'conv1d_14/kernel:0', 'conv1d_14/bias:0'],). Provided `grads_and_vars` is ((None, <tf.Variable 'embedding_4/embeddings:0' shape=(21, 100) dtype=float32>), (None, <tf.Variable 'conv1d_12/kernel:0' shape=(3, 100, 100) dtype=float32>), (None, <tf.Variable 'conv1d_12/bias:0' shape=(100,) dtype=float32>), (None, <tf.Variable 'conv1d_13/kernel:0' shape=(3, 100, 100) dtype=float32>), (None, <tf.Variable 'conv1d_13/bias:0' shape=(100,) dtype=float32>), (None, <tf.Variable 'conv1d_14/kernel:0' shape=(3, 100, 21) dtype=float32>), (None, <tf.Variable 'conv1d_14/bias:0' shape=(21,) dtype=float32>)).
0 Answers
Related