基于AlexNet模型的图像分类

问题描述:基于AlexNet模型的图像分类

AlexNet 框架包含了输入层、5个卷积层、3个全连接层以及输出层。其中有3个卷积层进行了最大池化。

AlexNet框架的特点:1、使用了Relu激活函数,相比于sigmoid或tanh函数,它是一种非饱和函数,运行速度更快;并且Relu激活函数利用分片线性结构实现了非线性的表达方式,更适合于层数较深的网络。

2、局部响应归一化:为了改善网络的性能,在部分卷积层中使用了归一化处理。

3、重叠池化:传统的池化没有重叠,不同窗口的池化过程独立计算。AlexNet使用了重叠池化,与不重叠窗口相比,有助于缓解过拟合现象。

4、同时,AlexNet网络采用丢失输出操作减少过拟合现象。

具体实现:

inputdata.py:定义了数据集的情况,数据集中一共有两类图片,分别是sun.jpg,另一类是cac.jpg.对这两类图片进行读取。

inputdata.py
import tensorflow as tf
import os
import numpy as np
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

def get_files(file_dir):
    sun = []
    label_sun = []
    cac = []
    label_cac = []
    for file in os.listdir(file_dir):
        name = file.split(sep='.')
        if 'sun' in name[0]:
            sun.append(file_dir + file)
            label_sun.append(0)
        else:
            if 'cac' in name[0]:
                cac.append(file_dir + file)
                label_cac.append(1)
        image_list = np.hstack((sun, cac))
        label_list = np.hstack((label_sun, label_cac))

    # 把标签和图片都放倒一个 temp 中 然后打乱顺序,然后取出来
    temp = np.array([image_list, label_list])
    temp = temp.transpose()
    # 打乱顺序
    np.random.shuffle(temp)

    # 取出第一个元素作为 image 第二个元素作为 label
    image_list = list(temp[:, 0])
    label_list = list(temp[:, 1])
    label_list = [int(i) for i in label_list]
    return image_list, label_list


# image_W ,image_H 指定图片大小,batch_size 每批读取的个数 ,capacity队列中 最多容纳元素的个数
def get_batch(image, label, image_W, image_H, batch_size, capacity):
    # 转换数据为 ts 能识别的格式
    image = tf.cast(image, tf.string)
    label = tf.cast(label, tf.int32)

    # 将image 和 label 放倒队列里
    input_queue = tf.train.slice_input_producer([image, label])
    label = input_queue[1]
    # 读取图片的全部信息
    image_contents = tf.read_file(input_queue[0])
    # 把图片解码,channels =3 为彩色图片, r,g ,b  黑白图片为 1 ,也可以理解为图片的厚度
    image = tf.image.decode_png(image_contents, channels=3)
    # 将图片以图片中心进行裁剪或者扩充为 指定的image_W,image_H
    image = tf.image.resize_image_with_crop_or_pad(image, image_W, image_H)
    # 对数据进行标准化,标准化,就是减去它的均值,除以他的方差
    image = tf.image.per_image_standardization(image)

    # 生成批次  num_threads 有多少个线程根据电脑配置设置  capacity 队列中 最多容纳图片的个数  tf.train.shuffle_batch 打乱顺序,
    image_batch, label_batch = tf.train.batch([image, label], batch_size=batch_size, num_threads=4, capacity=capacity)

    # 重新定义下 label_batch 的形状
    label_batch = tf.reshape(label_batch, [batch_size])
    # 转化图片
    image_batch
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
中文字体识别是指通过机器学习模型对输入的中文字符进行识别和分类。AlexNet是一种经典的卷积神经网络模型,它在2012年的ImageNet图像分类比赛中夺得冠军。在中文字体识别中,我们可以使用AlexNet模型来提取中文字符的特征,然后使用分类器对不同字体的字符进行分类。 具体实现步骤如下: 1. 数据集准备:收集不同字体的中文字符图片,建立一个有标签的数据集。可以使用开源的中文字体数据集或自己制作数据集。 2. 数据预处理:将图片转换为统一的大小和格式,如灰度图像、大小为224x224像素的RGB图像等。同时可以进行数据增强操作,如旋转、翻转、裁剪等。 3. 特征提取:使用AlexNet模型对预处理后的图片进行特征提取。AlexNet包含5个卷积层和3个全连接层,其中前5个卷积层提取特征,后面的全连接层进行分类。 4. 分类器设计:使用提取的特征训练分类器,常见的分类器有支持向量机(SVM)、逻辑回归、决策树等。 5. 模型训练和测试:将数据集分为训练集和测试集,使用训练集对模型进行训练,使用测试集对模型进行测试和评估,可以计算模型的准确率、精度和召回率等指标。 6. 模型优化:对模型进行优化,如调整超参数、增加或减少网络层数等。 最后,我们可以使用训练好的模型对新的中文字符图片进行识别和分类。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值