Keras(二十一)10monkeys基础模型和数据增强

38 篇文章 2 订阅
35 篇文章 11 订阅

本文将介绍:

  • 10monkeys基础模型搭建与训练
  • keras实现数据增强

一,下载kaggle-10monkey数据

通过下面的链接,下载dataset到本地目录intput
kaggle-10monkey下载地址

二,使用keras中ImageDataGenerator读取数据、数据增强

1,实例化ImageDataGenerator
# 对于图片数据,在keras里有更高层的封装.读取数据且做数据增强 -> Generator
train_datagen = keras.preprocessing.image.ImageDataGenerator(
    rescale = 1./255,    # 图像中的每个像素点都是在0~255之间,得到一个0~1之间的数
    rotation_range = 40,    # 图片增强的方法,把图片随机旋转一个角度,旋转的角度就在-40~40之间
    width_shift_range = 0.2,    # 做水平位移 - 增加位移鲁棒性(如果0~1之间则位移比例随机选数做位移;如果大于1,则是具体的像素大小)
    height_shift_range = 0.2,   # 做垂直位移 - 增加位移鲁棒性(如果0~1之间则位移比例随机选数做位移;如果大于1,则是具体的像素大小)
    shear_range = 0.2,  # 剪切强度
    zoom_range = 0.2,   # 缩放强度
    horizontal_flip = True, # 是否随机做水平翻转
    fill_mode = 'nearest',  # 填充像素规则,用离其最近的像素点做填充
)
2,使用ImageDataGenerator读取图片
# 从训练集的文件夹中读取图片
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的形式-选择onehot编码后的形式 
# 从验证集的文件夹中读取图片
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")
3,查看训练家和验证集分别有多少张数据
train_num = train_generator.samples
valid_num = valid_generator.samples
print(train_num, valid_num)
4,如何从ImageDataGenerator中读取数据
for i in range(1):
    x, y = train_generator.next()
    print(x.shape, y.shape)
    print(y)

三,定义模型

1,定义模型
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(),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(num_classes, activation='softmax'),
])

model.compile(loss="categorical_crossentropy",
              optimizer="adam", metrics=['accuracy'])   # adam是更高级一些的优化器,更快速且稳定
2,查看模型结构
model.summary()

四,训练模型

epochs = 20
history = model.fit_generator(train_generator,
                              steps_per_epoch = train_num // batch_size,
                              epochs = epochs,
                              validation_data = valid_generator,
                              validation_steps = valid_num // batch_size)

五,打印模型训练曲线

def plot_learning_curves(history, label, epcohs, min_value, max_value):
    data = {}
    data[label] = history.history[label]
    data['val_'+label] = history.history['val_'+label]
    pd.DataFrame(data).plot(figsize=(8, 5))
    plt.grid(True)
    plt.axis([0, epochs, min_value, max_value])
    plt.show()
    
plot_learning_curves(history, 'accuracy', epochs, 0, 1)
plot_learning_curves(history, 'loss', epochs, 1.5, 2.5)

六,总结代码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
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

# 打印使用的python库的版本信息
print(tf.__version__)
print(sys.version_info)
for module in mpl, np, pd, sklearn, tf, keras:
    print(module.__name__, module.__version__)
    
# 常量的定义
train_dir = "./input/training/training"
valid_dir = "./input/validation/validation"
label_file = "./input/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))

# 查看打印出来的label值
labels = pd.read_csv(label_file, header=0)
print(labels)

# 定义常量
height = 128
width = 128
channels = 3
batch_size = 64
num_classes = 10

# 一,使用keras中ImageDataGenerator读取数据
# 1,实例化ImageDataGenerator
# 对于图片数据,在keras里有更高层的封装.读取数据且做数据增强 -> Generator
train_datagen = keras.preprocessing.image.ImageDataGenerator(
    rescale = 1./255,    # 图像中的每个像素点都是在0~255之间,得到一个0~1之间的数
    rotation_range = 40,    # 图片增强的方法,把图片随机旋转一个角度,旋转的角度就在-40~40之间
    width_shift_range = 0.2,    # 做水平位移 - 增加位移鲁棒性(如果0~1之间则位移比例随机选数做位移;如果大于1,则是具体的像素大小)
    height_shift_range = 0.2,   # 做垂直位移 - 增加位移鲁棒性(如果0~1之间则位移比例随机选数做位移;如果大于1,则是具体的像素大小)
    shear_range = 0.2,  # 剪切强度
    zoom_range = 0.2,   # 缩放强度
    horizontal_flip = True, # 是否随机做水平翻转
    fill_mode = 'nearest',  # 填充像素规则,用离其最近的像素点做填充
)
# 2,使用ImageDataGenerator读取图片
# 从训练集的文件夹中读取图片
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的形式-选择onehot编码后的形式 
# 从验证集的文件夹中读取图片
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")
# 3,查看训练家和验证集分别有多少张数据
train_num = train_generator.samples
valid_num = valid_generator.samples
print(train_num, valid_num)

# 4,如何从ImageDataGenerator中读取数据
for i in range(1):
    x, y = train_generator.next()
    print(x.shape, y.shape)
    print(y)

    
# 二,定义模型
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(),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(num_classes, activation='softmax'),
])

model.compile(loss="categorical_crossentropy",
              optimizer="adam", metrics=['accuracy'])   # adam是更高级一些的优化器,更快速且稳定
model.summary()


# 三,训练模型
epochs = 20
history = model.fit_generator(train_generator,
                              steps_per_epoch = train_num // batch_size,
                              epochs = epochs,
                              validation_data = valid_generator,
                              validation_steps = valid_num // batch_size)

# 四,打印训练曲线
print(history.history.keys())
def plot_learning_curves(history, label, epcohs, min_value, max_value):
    data = {}
    data[label] = history.history[label]
    data['val_'+label] = history.history['val_'+label]
    pd.DataFrame(data).plot(figsize=(8, 5))
    plt.grid(True)
    plt.axis([0, epochs, min_value, max_value])
    plt.show()

plot_learning_curves(history, 'accuracy', epochs, 0, 1)
plot_learning_curves(history, 'loss', epochs, 0, 2.5)


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Keras-OCR 是一个基于 Keras 框架构建的开源光学字符识别库,可以帮助我们进行图像中的文本检测和识别。Keras-OCR 自带了一些预训练模型和数据集,方便我们进行文本识别任务。 要下载 Keras-OCR 自带的模型和数据集,可以按照以下步骤进行操作: 1. 首先,确保已经安装了 Keras-OCR 的依赖库。可以通过 pip 命令安装,在命令行中输入以下命令: ``` pip install keras-ocr ``` 2. 安装完成后,就可以使用 Keras-OCR 的预训练模型和数据集了。Keras-OCR 提供了一个名为 `keras_ocr.tools.downloader.download()` 的函数,用于下载预训练模型和数据集。在 Python 脚本中,引入 `keras_ocr.tools` 模块,并使用 `download()` 函数进行下载。示例如下: ``` from keras_ocr.tools import downloader downloader.download() ``` 3. 运行上述代码后,将会弹出一个命令行交互界面,展示可供下载的模型和数据集列表。可以根据需求选择需要下载的模型和数据集。输入数字来选择要下载的内容,然后按下回车键进行确认。 4. 下载过程会自动开始,并显示下载进度。下载完成后,Keras-OCR 自带的模型和数据集将存储在默认的文件夹中,可以在 Python 脚本中直接引用这些文件进行文本识别任务。 总结一下,通过安装 Keras-OCR 并使用 `keras_ocr.tools.downloader.download()` 函数,我们可以方便地下载并使用 Keras-OCR 自带的预训练模型和数据集,以进行光学字符识别。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值