Я хочу использовать обученную модель для изменения входных данных, чтобы она сводила к минимуму потери (а не изменяемые обучаемые переменные) в духе Deep Dreaming в Tensorflow 2.0, но я не добилась успеха.
Скажите, что у меня естьбазовый NN, такой как в документах
class MyModel(Model):
def __init__(self):
super(MyModel, self).__init__()
self.conv1 = Conv2D(32, 3, activation='relu')
self.flatten = Flatten()
self.d1 = Dense(128, activation='relu')
self.d2 = Dense(10, activation='softmax')
def call(self, x):
x = self.conv1(x)
x = self.flatten(x)
x = self.d1(x)
return self.d2(x)
model = MyModel()
, который я тренирую, используя простую функцию tf.GradientTape
@tf.function
def train_step(image, label):
with tf.GradientTape() as tape:
predictions = model(image)
loss = loss_object(label, predictions)
gradients = tape.gradient(loss, model.trainable_variables)
optimizer.apply_gradients(zip(gradients, model.trainable_variables))
Какой идиоматический способ создать функцию, которая вместо этого будет вычислять и вычислятьпримените градиенты к входным изображениям.
Я предполагал, что это будет так же просто, как
def train_step(image, label):
with tf.GradientTape() as tape:
predictions = model(image)
loss = loss_object(label, predictions)
gradients = tape.gradient(loss, image)
optimizer.apply_gradients(zip(gradients, image))
Однако это не сработает.