python - keras 中 ResNet50 进行迁移学习时,损失总是归于 nan
问题描述
我正在使用迁移学习通过ResNet50
模型Keras
和加载预先训练的权重来训练图像分类器,但是最初和立即loss
进入并保持在随机水平。nan
acc
实际上,我不知道出了什么问题,因为我已经使用这个模型成功地训练了一个分类器,虽然它不高acc
但效果很好。这次失败了。
我调整了lr
但什么也没发生。有人说数据可能有问题,所以我更改了数据,结果发现使用不同的图像相同的模型会显示不同的结果(也就是说,一些数据/图像效果很好,而另一些数据/图像会loss:nan
立即产生结果)。怎么可能?我真的很困惑,无法弄清楚我的图像有什么问题。
数据集:8 个类,每个类包含大约 300 张图像。
这是所有人的代码:
import keras
import h5py
import numpy as np
import matplotlib.pyplot as plt
from keras.applications import ResNet50
from keras.models import Sequential
from keras.layers import Dense, Flatten, GlobalAveragePooling2D
from keras.applications.resnet50 import preprocess_input
from keras.preprocessing.image import ImageDataGenerator
data_generator = ImageDataGenerator(preprocessing_function= preprocess_input,
rescale = 1./255)
train_generator = data_generator.flow_from_directory("image/train",
target_size = (100, 100),
batch_size = 32,
class_mode = "categorical")
dev_generator = data_generator.flow_from_directory("image/dev",
target_size = (100, 100),
batch_size = 32,
class_mode = "categorical")
num_classes = 8
model = Sequential()
model.add(ResNet50(include_top = False, pooling = "avg", weights= "resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5"))
model.add(Dense(num_classes, activation = "softmax"))
model.layers[0].trainable = False
model.compile(optimizer= "adam", loss= "categorical_crossentropy", metrics=["accuracy"])
model.fit_generator(train_generator, steps_per_epoch= 1, epochs = 1)
运行输出为:
Epoch 1/1
1/1 [==============================] - 6s 6s/step - loss: nan - acc: 0.0938
解决方案
推荐阅读
- python - 如何使数组输入循环进入数据框
- vim - 无法在 RHEL7 上打开“gvim”
- android - 屏幕上和 Android 模拟器之间的鼠标指针偏移
- linux - 有没有办法在同一个 bash shell 脚本中包含不同的路径
- python - 机器学习算法的对数似然函数
- javascript - 当两个服务都属于同一个模块时,如何将一个nestjs服务注入另一个服务?
- ansible - ansible-galaxy 安装 ahuffman.resolv 不起作用
- windows - 调试凭据提供程序崩溃
- nginx - 请求正文未传入 http url,但它存在于 https url
- pyspark - pysprak - 微批处理流式增量表作为对另一个增量表执行合并的源 - 未调用 foreachbatch