Kaggle-花朵分类任务-2

本文档详细介绍了使用深度学习对Kaggle上的花朵分类任务进行处理的过程,包括数据获取与转换、模型构建、数据增强、CNN模型的建立、优化算法LR Annealer的使用以及结果评估。在实验中,通过Keras库实现数据预处理和模型训练,最终在验证集上取得了77.61%的识别率,但存在过拟合现象。
摘要由CSDN通过智能技术生成

花朵分类任务-2

1. 图像数据的获取和转换

1.1 文件

flowers/category_name/image
文件夹地址单独设定:

FLOWER_DAISY_DIR='./flowers/daisy'
FLOWER_SUNFLOWER_DIR='./flowers/sunflower'
FLOWER_TULIP_DIR='./flowers/tulip'
FLOWER_DANDI_DIR='./flowers/dandelion'
FLOWER_ROSE_DIR='./flowers/rose'

1.2 图片数据的转换

  • X=[ ]是存放图片数据的list, Z=[ ]是存放图片标签的list
  • X.shape = (m, 150, 150, 3)   使用cv2读取图片
  • 分别读取每一类的所有图片
img = cv2.imread(path,cv2.IMREAD_COLOR) # 读取图片
img = cv2.resize(img, (IMG_SIZE,IMG_SIZE)) # 统一大小 150 * 150
#img.shape = (150, 150, 3)
#X.shape = (m, 150, 150, 3) m是图片数量
#此时X的形式已经固定-tensor
X.append(np.array(img)) # 存放图片数据 
Z.append(str(label)) # 存放图片标签

此时X已是tensor形式,Z中元素为str形式,按读取顺序排列

如:Z = [‘daisy’,‘daisy’…‘rose’,‘rose’…]

1.3 数据的编码

将数据转换为可以进行训练的格式:

# Label都在Z[]中,将标签转为数字编码,再变为one-hot编码
le=LabelEncoder()
Y=le.fit_transform(Z) # 将标签变为数字,按标签的首字母排序,从0-4
Y=to_categorical(Y,5) # one-hot
# 现在X还是list,里面的元素是np.array(img)
X=np.array(X) # 将其转为np数组
X=X/255 # 归一化

# 此时X是图片数据,Y是标签数据

X不多赘述,Y进行了两次编码,从str数字编码one-hot

所以最后才能用数字编码进行反变换生成标签

1.4 数据集划分

  • 此时已经得到可以用于训练的格式,但还是顺序的,还需要划分训练集和验证集,以及乱序
  • 使用sklearn的train_test_split()函数,具体用法自行搜索
    得到训练集和测试集,打乱顺序,并且可以按照比例划分

2.模型构建

2.1 数据增强

使用Keras自带的ImageDataGenerator函数,用法自行查看手册

  • 随机旋转、随机缩放、随机水平垂直平移三种方法

2.2 CNN构建

Use your imagination 😃

2.3 优化算法-LR Annealer

和学习率衰减类似,当学习停滞时,降低学习率

利用Keras的Callback实现

2.4 结果评估

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
==============================================================
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是使用Python和Keras库来解决Kaggle Digit Recognizer比赛的代码示例: 首先,导入必要的库: ```python import pandas as pd import numpy as np from keras.models import Sequential from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPool2D from keras.optimizers import RMSprop from keras.preprocessing.image import ImageDataGenerator from sklearn.model_selection import train_test_split ``` 然后,读取和处理训练数据和测试数据: ```python train_data = pd.read_csv('train.csv') test_data = pd.read_csv('test.csv') # 将数据分成输入和输出 X_train = train_data.drop(['label'], axis=1) y_train = train_data['label'] # 将输入数据重塑为28x28像素 X_train = X_train.values.reshape(-1, 28, 28, 1) test_data = test_data.values.reshape(-1, 28, 28, 1) # 将像素值转换为浮点数并归一化 X_train = X_train.astype('float32') / 255 test_data = test_data.astype('float32') / 255 # 将输出数据转换为独热编码 y_train = pd.get_dummies(y_train).values ``` 接着,将数据分成训练集和验证集,设置数据增强器并构建卷积神经网络模型: ```python # 将数据分成训练集和验证集 X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.1) # 设置数据增强器 datagen = ImageDataGenerator( rotation_range=10, zoom_range = 0.1, width_shift_range=0.1, height_shift_range=0.1) # 构建卷积神经网络模型 model = Sequential() model.add(Conv2D(filters=32, kernel_size=(5,5), padding='Same', activation='relu', input_shape=(28,28,1))) model.add(Conv2D(filters=32, kernel_size=(5,5), padding='Same', activation='relu')) model.add(MaxPool2D(pool_size=(2,2))) model.add(Dropout(0.25)) model.add(Conv2D(filters=64, kernel_size=(3,3), padding='Same', activation='relu')) model.add(Conv2D(filters=64, kernel_size=(3,3), padding='Same', activation='relu')) model.add(MaxPool2D(pool_size=(2,2), strides=(2,2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(256, activation="relu")) model.add(Dropout(0.5)) model.add(Dense(10, activation="softmax")) # 定义优化器和损失函数 optimizer = RMSprop(lr=0.001, rho=0.9, epsilon=1e-08, decay=0.0) model.compile(optimizer=optimizer, loss="categorical_crossentropy", metrics=["accuracy"]) ``` 最后,使用训练集和验证集来训练和评估模型,并对测试数据进行预测: ```python # 训练模型 history = model.fit_generator(datagen.flow(X_train, y_train, batch_size=64), epochs=30, validation_data=(X_val, y_val), verbose=2) # 在验证集上评估模型 score = model.evaluate(X_val, y_val, verbose=0) print("Validation loss:", score[0]) print("Validation accuracy:", score[1]) # 对测试数据进行预测 predictions = model.predict(test_data) ``` 这就是一个简单的使用卷积神经网络和数据增强器来解决Kaggle Digit Recognizer比赛的代码示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值