В градиентной ленте градиенты тензорного потока равны 0.s

#tensorflow2.0 #gradient #gradienttape

#тензорный поток 2,0 #градиент #градиентная лента

Вопрос:

Вот часть модели, над которой я работаю. Будучи новичком в вычислении градиентов в tf, я запутался, когда обнаружил, что все значения градиента равны 0. Вот код:

 class A:  def __init__(self, inputA_dim, inputB_dim):  self.inputA_dim = (35, 35, 1)  self.inputB_dim = 2  self.model = self.nn_model()  self.opt = tf.keras.optimizers.Adam() # print(self.model.summary())   def nn_model(self):  inputA = Input(self.inputA_dim)  conv1 = Conv2D(10, 3, padding="same", activation="relu")(inputA)  pool1 = MaxPool2D(padding='same')(conv1)  conv2 = Conv2D(10, 3, padding="same", activation="relu")(pool1)  pool2 = MaxPool2D(padding='same')(conv2)  conv3 = Conv2D(10, 3, padding="same", activation="relu")(pool2)  pool3 = MaxPool2D(padding='same')(conv3)  flatten = Flatten()(pool3)  s2 = Dense(32, activation="relu")(flatten)  s3 = Dense(32, activation="relu")(s2)  s4 = Dense(2, activation="relu")(s3)  inputB = Input((self.inputB_dim,))  a1 = Dense(2, activation="relu")(inputB)  c1 = concatenate([s2, a1], axis=-1)  c2 = Dense(4, activation="relu")(c1)  outputs = Dense(1, activation="linear")(c2)  return tf.keras.Model([inputA, inputB], outputs)   def predict(self, inputs):  return self.model.predict(inputs)   def gradients(self, inputA, inputB):  inputB = tf.convert_to_tensor(inputB)  with tf.GradientTape() as tape:  tape.watch(inputB)  values = self.model([inputA, inputB])  values = tf.squeeze(values)  g = tape.gradient(values, inputB)  print(g)  return g  

Позже я обнаружил, что есть еще один метод, называемый якобианом, который я также использовал здесь, все еще давая 0.s в качестве значений. Кто-нибудь может сказать мне, что делать. Спасибо.

Комментарии:

1. Что такое «действия»?

2. @SusmitAgrawal это отредактировано, оно должно быть введено

3. проблема решена сокращением сети conv.