- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用带有 tensorflow 后端的 keras 自定义 resnet50。然而,在训练后,我的 val_loss 不断增加。尝试不同的学习率和批量大小并不能解决问题。
使用不同的预处理方法,例如重新缩放或在 ImageDataGenerator 中使用 resnet50 的 preprocess_input 函数也没有解决问题。
这是我使用的代码
导入和预处理数据:
from keras.preprocessing.image import ImageDataGenerator
from keras.applications.resnet50 import preprocess_input, decode_predictions
IMAGE_SIZE = 224
BATCH_SIZE = 32
num_classes = 27
main_path = "C:/Users/aaron/Desktop/DATEN/data"
gesamt_path = os.path.join(main_path, "ML_DATA")
labels = listdir(gesamt_path)
data_generator = ImageDataGenerator(#rescale=1./255,
validation_split=0.20,
preprocessing_function=preprocess_input)
train_generator = data_generator.flow_from_directory(gesamt_path, target_size=(IMAGE_SIZE, IMAGE_SIZE), shuffle=True, seed=13,
class_mode='categorical', batch_size=BATCH_SIZE, subset="training")
validation_generator = data_generator.flow_from_directory(gesamt_path, target_size=(IMAGE_SIZE, IMAGE_SIZE), shuffle=False, seed=13,
class_mode='categorical', batch_size=BATCH_SIZE, subset="validation")
定义和训练模型
img_width = 224
img_height = 224
model = keras.applications.resnet50.ResNet50()
classes = list(iter(train_generator.class_indices))
model.layers.pop()
for layer in model.layers:
layer.trainable=False
last = model.layers[-1].output
x = Dense(len(classes), activation="softmax")(last)
finetuned_model = Model(model.input, x)
finetuned_model.compile(optimizer=Adam(lr=0.001), loss='categorical_crossentropy', metrics=['accuracy'])
for c in train_generator.class_indices:
classes[train_generator.class_indices[c]] = c
finetuned_model.classes = classes
earlystopCallback = keras.callbacks.EarlyStopping(monitor='val_loss', min_delta=0, patience=8, verbose=1, mode='auto')
tbCallBack = keras.callbacks.TensorBoard(log_dir='./Graph', histogram_freq=0, write_graph=True, write_images=True)
history = finetuned_model.fit_generator(train_generator,
validation_data=validation_generator,
epochs=85, verbose=1,callbacks=[tbCallBack,earlystopCallback])
最佳答案
您需要匹配用于预训练网络的预处理,而不是自己的预处理。仔细检查网络输入张量,即输入的 channel 平均值是否与用于预训练网络的数据相匹配。
您的新数据可能与用于预训练网络的数据有很大不同。在这种情况下,所有 BN 层都会将其预训练的均值/方差迁移到新值,因此增加损失也是可能的(但最终损失应该会减少)。
关于python - 使用 Keras 微调 ResNet50 - val_loss 不断增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51544407/
我在下面的类(class)中尝试获取包含每次训练的损失和验证损失的元组列表 class LossHistory(keras.callbacks.Callback): def on_train_
我是 tensorflow 新手,我正在尝试通过 github 中的示例来学习它,现在我找到了一个示例,但损失和 val_loss 的结果大于“1”(您可以在下面看到结果在 800 之间)和 700
我有一个简单的问题突然让我怀疑我的工作。 如果我只有训练和验证集,我是否可以在训练时监控 val_loss,或者这会增加我的训练偏差。我想在验证集训练结束时测试我的准确性,但突然我在想,如果我在训练时
当我在自定义回调中手动计算验证损失时,结果与使用 L2 内核正则化时 keras 报告的结果不同。 示例代码: class ValidationCallback(Callback): def
(使用 keras)训练模型时,val_loss(如 keras 训练日志中所示)/epoch_loss(如张量板中所示)指标是什么测量模型何时有多个输出?如果这很重要,那么这些输出是否也被加权了?
我是 Keras 新手,我正在使用它构建一个普通的神经网络来对数字 MNIST 数据集进行分类。 事先我已经将数据分为 3 部分:55000 个用于训练,5000 个用于评估,10000 个用于测试,
我根据此处讨论的内容为 mnist 数据集设置了一个去噪自动编码器: https://blog.keras.io/building-autoencoders-in-keras.html 我正在尝试查看
训练开始时,运行窗口中只显示loss和acc,缺少val_loss和val_acc。只有在最后,才会显示这些值。 model.add(Flatten()) model.add(Dense(512, a
我正在训练 Keras(Tensorflow 后端,Python,在 MacBook 上),并且在 fit_generator 函数的提前停止回调中遇到错误。错误如下: RuntimeWarning:
我正在尝试建立一个 LSTM 模型来预测股票第二天是上涨还是下跌。如您所见,一个简单的分类任务让我卡住了几天。我只选择 3 个特征来输入我的网络,下面我展示了我的预处理: # pre-processi
我正在尝试对图像进行分类,无论它们是猫、狗还是 Pandas 。数据包含所有图像(猫 + 狗 + Pandas ),标签包含它们的标签,但不知何故,当我将数据拟合到模型时,val_loss 和 val
我正在尝试对图像进行分类,无论它们是猫、狗还是 Pandas 。数据包含所有图像(猫 + 狗 + Pandas ),标签包含它们的标签,但不知何故,当我将数据拟合到模型时,val_loss 和 val
我正在用keras训练模型,并且在fit_generator函数的回调中遇到错误。我总是跑到纪元3rd并收到此错误 annotation_path = 'train2.txt' log_dir
我正在训练神经网络并得到以下输出。 loss 和 val_loss 都在减少,这让我很高兴。然而,val_acc 保持不变。这能有什么原因呢?我的数据非常不平衡,但我通过 sklearn comput
就像这样: x = keras.layers.Input(shape=(3,)) y = keras.layers.Dense(5)(x) G = keras.models.Model(x, y,na
我在 Keras 中记录“val_loss”和“val_acc”时遇到问题。 'loss' 和 'acc' 很容易,因为它们总是记录在 model.fit 的历史记录中。 如果在 fit 中启用验证,
我正在尝试使用带有 tensorflow 后端的 keras 自定义 resnet50。然而,在训练后,我的 val_loss 不断增加。尝试不同的学习率和批量大小并不能解决问题。 使用不同的预处理方
我实现了一个数据生成器,将我的训练数据分成 256 个小批量,以避免内存错误。它在训练数据上运行,但在每个时期结束时不显示验证损失和验证准确性。我还将数据生成器应用于验证数据并定义了验证步骤。我不知道
我创建了一个用于序列分类(二进制)的 LSTM 网络,其中每个样本有 25 个时间步长和 4 个特征。以下是我的keras网络拓扑: 上图,Dense层之后的激活层使用了softmax函数。我使用 b
我是 Keras 的新手,对如何理解我的模型结果有一些疑问。这是我的结果:(为方便起见,我只在每个 epoch 之后粘贴 loss acc val_loss val_acc) 对 4160 个样本进行
我是一名优秀的程序员,十分优秀!