GradientTape не рассчитывает градиенты после восстановления модели из ModelCheckPoint (TensorFlow)Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 GradientTape не рассчитывает градиенты после восстановления модели из ModelCheckPoint (TensorFlow)

Сообщение Anonymous »

Я обучаю CNN по Tensorflow для бинарной классификации и выполнения моего кода в Google Colab.

Код: Выделить всё

CNN_model = tf.keras.Sequential([
tf.keras.layers.Input(shape=(IMAGE_SIZE, IMAGE_SIZE, 3)),
tf.keras.layers.Conv2D(filters=32, kernel_size=3, activation="relu", name='conv1'),
tf.keras.layers.Conv2D(filters=64, kernel_size=3, activation="relu", name='conv2'),
tf.keras.layers.MaxPooling2D(pool_size=2, name='maxpool1'),
tf.keras.layers.Conv2D(filters=128, kernel_size=3, activation="relu", name='conv3'),

tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu', name='dense1'),
tf.keras.layers.Dense(1, activation='sigmoid', name='prediction')

], name='CNN_model')
< /code>
Поскольку модели требуется некоторое время, я подумал, что должен сохранить ее (через обратный вызов модели) и восстановить ее при необходимости. < /p>
callbacks = [
tf.keras.callbacks.ModelCheckpoint("best_CNN.keras",
save_best_only=True),
]
< /code>
CNN_model = tf.keras.models.load_model("best_CNN.keras")
< /code>
Все пошло хорошо, пока я не внедрил Grad-Cam (для прозрачности решения). Я вставлю первый раздел make_gradcam_heatmap 
:

Код: Выделить всё

def make_gradcam_heatmap(img_array, model, last_conv_layer_name):

grad_model = tf.keras.models.Model(
model.inputs,
[model.get_layer(last_conv_layer_name).output, model.layers[-1].input]
)

with tf.GradientTape() as tape:
tape.watch(img_array)

last_conv_layer_output, last_layer_input = grad_model(img_array)

logits = tf.matmul(last_layer_input, model.layers[-1].kernel) + model.layers[-1].bias

grads = tape.gradient(logits, last_conv_layer_output)
При обучении модели и создании тепловых карт в одном и том же сеансе, нет проблем, но когда я передаю make_gradcam_heatmap восстановленная модель, лента. Cnn_model.trainable это правда.
Я пытался повернуть обучение каждому слою в True, без результата

Код: Выделить всё

for layer in CNN_model.layers:
layer.trainable = True
На случай, если это может помочь, я использую набор данных «Малярия» из наборов данных Tensorflow

Подробнее здесь: https://stackoverflow.com/questions/796 ... delcheckpo
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»