我正在使用 tensorflow 2.0
训练一个模型。我的训练集中的图像具有不同的分辨率。我建立的模型可以处理可变分辨率(卷积层后跟全局均值池化)。我的训练集非常小,我想在一个批次中使用全部训练集。
由于我的图像分辨率不同,所以无法使用 model.fit()
。因此,我计划逐个将每个样本通过网络,累积误差/梯度,然后应用一个优化器步骤。我能够计算损失值,但我不知道如何累积损失/梯度。如何累积损失/梯度,然后应用单个优化器步骤?
代码:
for i in range(num_epochs):
print(f'Epoch: {i + 1}')
total_loss = 0
for j in tqdm(range(num_samples)):
sample = samples[j]
with tf.GradientTape as tape:
prediction = self.model(sample)
loss_value = self.loss_function(y_true=labels[j], y_pred=prediction)
gradients = tape.gradient(loss_value, self.model.trainable_variables)
self.optimizer.apply_gradients(zip(gradients, self.model.trainable_variables))
total_loss += loss_value
epoch_loss = total_loss / num_samples
print(f'Epoch loss: {epoch_loss}')
tf.Keras.fit()
?你是不是想用tf.keras.Model
中的model.fit()
方法? - GPhilotrain_step
的实现。 - GPhilo