import numpy as np
from tensorflow.keras.optimizers import Adam
import cv2
from tensorflow.keras.preprocessing.image import img_to_array
from sklearn.model_selection import train_test_split
from tensorflow.python.keras.callbacks import ModelCheckpoint, ReduceLROnPlateau
from tensorflow.keras.applications import DenseNet121
from tensorflow.keras.applications.resnet import ResNet50
import os
import tensorflow as tf
from tensorflow.python.keras.layers import Dense
from tensorflow.python.keras.models import Sequential
import albumentations
norm_size = 224
datapath = ‘data/train’
EPOCHS = 20
INIT_LR = 1e-3
labelList = []
dicClass = {‘cat’: 0, ‘dog’: 1}
classnum = 2
batch_size = 4
np.random.seed(42)
这里可以看出tensorflow2.0以上的版本集成了Keras,我们在使用的时候就不必单独安装Keras了,以前的代码升级到tensorflow2.0以上的版本将keras前面加上tensorflow即可。
tensorflow说完了,再说明一下几个重要的全局参数:
-
norm_size = 100 设置输入图像的大小,图像的大小根据自己的需求设置,别太大,够用就行了(DenseNet121默认的图片尺寸是224×224,我们在这里并没有按照默认的)。
-
datapath = ‘data/train’ 设置图片存放的路径,在这里要说明一下如果图片很多,一定不要放在工程目录下,否则Pycharm加载工程的时候会浏览所有的图片,很慢很慢。
-
EPOCHS = 100 epochs的数量,关于epoch的设置多少合适,这个问题很纠结,一般情况设置300足够了,如果感觉没有训练好,再载入模型训练。
-
INIT_LR = 1e-3 学习率,一般情况从0.001开始逐渐降低,也别太小了到1e-6就可以了。
-
classnum = 2 类别数量,数据集有两个类别,所有就分为两类。
-
batch_size = 16 batchsize,根据硬件的情况和数据集的大小设置,太小了loss浮动太大,太大了收敛不好,根据经验来,一般设置为2的次方。windows可以通过任务管理器查看显存的占用情况。
Ubuntu可以使用nvidia-smi查看显存的占用。
- 定义numpy.random的随机因子。这样就可以固定随机的index
和以前做法不同的是,这里不再处理图片,而是只返回图片路径的list列表。
具体做法详见代码:
def loadImageData():
imageList = []