TensorFlow2.0入门到进阶系列——5.3_TensorFlow—kaggle实战

该博客介绍了使用TensorFlow2.0在Kaggle上进行两个图像识别任务的实战:10-monkey-species和CIFAR-10。通过数据增强提升10-monkey-species的模型性能,300轮训练后准确率可达86%。还探讨了在ResNet50上进行迁移学习微调,发现训练后五层比仅训练最后一层效果更好。对于CIFAR-10数据集,详细讲解了如何下载数据及使用Keras数据生成器进行处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、kaggle实战_10-monkey-species

利用kaggle进行训练

  • 登陆kaggle官网
  • 找到10-monkey-species数据集
  • 新建notebook编写代码

1.1、使用数据增强

  • 加载库
%matplotlib inline
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import os
import pandas as pd
import sklearn
import sys
import tensorflow as tf
import time

from tensorflow import keras

print(tf.__version__)
print(sys.version_info)
for module in mpl,np,pd,sklearn,tf,keras:
    print(module.__name__,module.__version__)

在这里插入图片描述

  • 加载数据
train_dir = "../input/10-monkey-species/training/training"
valid_dir = "../input/10-monkey-species/validation/validation"
label_file = "../input/10-monkey-species/monkey_labels.txt"
print(os.path.exists(train_dir))
print(os.path.exists(valid_dir))
print(os.path.exists(label_file))


print(os.listdir(train_dir))
print(os.listdir(valid_dir))

在这里插入图片描述

#读取数据
labels = pd.read_csv(label_file,header = 0)
print(labels)

在这里插入图片描述

#读取图片
height = 128
width = 128
channels = 3
batch_size = 64
num_classes = 10

#读取数据(keras有一个高层封装:可以读取数据且做数据增强 -> ImageDataGenerator)
train_datagen = keras.preprocessing.image.ImageDataGenerator(
    rescale = 1./255,                #图像预处理(归一化),输入图片的像素点的值是(0,255)
    rotation_range = 40,             #图片增强,把图片随机旋转一个角度(-40,40)
    width_shift_range = 0.2,         #给图片做位移,增加图像位移鲁棒性(池化也可以增加图像位移鲁棒性)
    height_shift_range = 0.2,        #位移的参数,如果写<1的数,则表示位移比例。>1的值表示移动的像素值(这里并不是平移20%,而是在(0,20%)之间选一个数去平移)
    shear_range = 0.2,               #表示剪切强度
    zoom_range = 0.2,                #表示缩放强度 
    horizontal_flip = True,         #表示是否去做随机的水平翻转
    fill_mode = 'nearest',           #对图片进行处理(放大等)的时候,如果需要填充像素,的填充方式
)
#从文件夹读取图片,并调用上述方法进行预处理
train_generator = train_datagen.flow_from_directory(train_dir,
                                                   target_size = (height,width),     #将读进来的图片缩放到指定大小
                                                   batch_size = batch_size,          #生成的图片,多少张为一组
                                                   seed = 7,                         #随机数,做随机的,随便设置一个数即可
                                                   shuffle = True,                   #数据是否需要混排
                                                   class_mode = "categorical")       #设置label的格式,one-hot编码前()后(categorical)两种格式
                                                   

#定义验证集的generator
valid_datagen = keras.preprocessing.image.ImageDataGenerator(rescale = 1./255)       #验证集也需要做归一化
valid_generator = valid_datagen.flow_from_directory(valid_dir,
                                                    target_size = (height,width),     #将读进来的图片缩放到指定大小
                                                    batch_size = batch_size,          #生成的图片,多少张为一组
                                                    seed = 7,                         #随机数,做随机的,随便设置一个数即可
                                                    shuffle = False,                  #验证集不做训练,所以不需要做混排
                                                    class_mode = "categorical")       #设置label的格式,one-hot编码前()后(categorical)两种格式
'''
class_mode: "categorical", "binary", "sparse"或None之一. 默认为"categorical.
该参数决定了返回的标签数组的形式:
 "categorical"会返回2D的one-hot编码标签;
 "binary"返回1D的二值标签."sparse"返回1D的整数标签;
 如果为None则不返回任何标签, 生成器将仅仅生成batch数据;
 这种情况在使用model.predict_generator()和model.evaluate_generator()等函数时会用到.
 '''
#查看生成多少张数据
train_num = train_generator.samples
valid_num = valid_generator.samples
print(train_num,valid_num)

在这里插入图片描述

#从generator中提取数据
for i in range(2):     #遍历两次,取两次数据
    x,y = train_generator.next()   #在train_generator中读取数据,next方法,获取下一组数据
    print(x.shape,y.shape)         #x是4维矩阵 -> 大小128 * 128、通道数3、样本数64     y是64个样本数,10个类别
    print(y)                       #x数据太多了,这里就不打印了

在这里插入图片描述

#构建模型
model = keras.models.Sequential([
    keras.layers.Conv2D(filters=32,kernel_size=3,padding='same',
                        activation='relu',input_shape=[width,height,channels]),
    keras.layers.Conv2D(filters=32,kernel_size=3,padding='same',
                       activation='relu'),
    keras.layers.MaxPool2D(pool_size=2),
    
    keras.layers.Conv2D(filters=64,kernel_size=3,padding='same',
                        activation='relu'),
    keras.layers.Conv2D(filters=64,kernel_size=3,padding='same',
                       activation='relu'),
    keras.layers.MaxPool2D(pool_size=2),
    
    keras.layers.Conv2D(filters=128,kernel_size=3,padding='same',
                        activation='relu'),
    keras.layers.Conv2D(filters=128,kernel_size=3,padding='same',
                       activation='relu'),
    keras.layers.MaxPool2D(pool_size=2),
    
    keras.layers.Flatten
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值