tensorflow(三):用CNN进行图像分类

tensorflow2.0 CNN fashion MNIST图像分类 fashion MNIST图像分类 数据集简介   在 2017年8月份,德国研究机构Zalando Research在GitHub上推出了一个全新的数据集——fashion MNIST数据集,其中训练集包含60000个样例,测试集包含 10000个样例,分为10类,每一类的样本训练样本数量和测试样本数量相同。该数据集是一个替代 MNIST手写数据集的图像数据,比 MNIST数据复杂一些。该数据集的数据量较小,适用于用来验证某个算法可否正常运行和机器学习的入门。数据集的样本都来自日常穿着的衣裤鞋包,.. 阅读详情

参考:https://blog.csdn.net/u014432647/article/details/75276718

环境:ubuntu18.04+tensorflow+Gpu+Pycharm

文件路径:/home/lcc/PycharmProjects/花卉/flower_photos/

flower_photos/文件夹下是5类花的图像

# -*- coding: utf-8 -*-

from skimage import io, transform
import glob
import os
import tensorflow as tf
import numpy as np
import time

path = '/home/lcc/PycharmProjects/花卉/flower_photos/'

# 将所有的图片resize成100*100
w = 100
h = 100
c = 3


# 读取图片用io.imread来读取每一张图片,然后resize成输入的大小(100,100,3),最后分别放入了data和label中。


def read_img(path):
    cate = [path + x for x in os.listdir(path) if os.path.isdir(path + x)]
    imgs = []
    labels = []
    for idx, folder in enumerate(cate):
        for im in glob.glob(folder + '/*.jpg'):
            print('reading the images:%s' % (im))
            img = io.imread(im)
            img = transform.resize(img, (w, h))
            imgs.append(img)
            labels.append(idx)
    return np.asarray(imgs, np.float32), np.asarray(labels, np.int32)


data, label = read_img(path)

# 打乱顺序,这里是把图片的顺序打乱,先生成一个等差数列,然后打乱,最后赋值回原来的data和label
num_example = data.shape[0]
arr = np.arange(num_example)
np.random.shuffle(arr)
data = data[arr]
label = label[arr]

# 将所有数据分为训练集和验证集,全部的数据中百分之80的用来train,剩下20的用来test
ratio = 0.8
s = np.int(num_example * ratio)
x_train = data[:s]
y_train = label[:s]
x_val = data[s:]
y_val = label[s:]

# -----------------构建网络----------------------
# 占位符
x = tf.placeholder(tf.float32, shape=[None, w, h, c], name='x')
y_ = tf.placeholder(tf.int32, shape=[None, ], name='y_')

# 第一个卷积层(100——>50)
conv1 = tf.layers.conv2d(
    inputs=x,
    filters=32,
    kernel_size=[5, 5],
    padding="same",
    activation=tf.nn.relu,
    kernel_initializer=tf.truncated_normal_initializer(stddev=0.01))
pool1 = tf.layers.max_pooling2d(inputs=conv1, pool_size=[2, 2], strides=2)

# 第二个卷积层(50->25)
conv2 = tf.layers.conv2d(
    inputs=pool1,
    filters=64,
    kernel_size=[5, 5],
    padding="same",
    activation=tf.nn.relu,
    kernel_initializer=tf.truncated_normal_initializer(stddev=0.01))
pool2 = tf.layers.max_pooling2d(inputs=conv2, pool_size=[2, 2], strides=2)

# 第三个卷积层(25->12)
conv3 = tf.layers.conv2d(
    inputs=pool2,
    filters=128,
    kernel_size=[3, 3],
    padding="same",
    activation=tf.nn.relu,
    kernel_initializer=tf.truncated_normal_initializer(stddev=0.01))
pool3 = tf.layers.max_pooling2d(inputs=conv3, pool_size=[2, 2], strides=2)

# 第四个卷积层(12->6)
conv4 = tf.layers.conv2d(
    inputs=pool3,
    filters=128,
    kernel_size=[3, 3],
    padding="same",
    activation=tf.nn.relu,
    kernel_initializer=tf.truncated_normal_initializer(stddev=0.01))
pool4 = tf.layers.max_pooling2d(inputs=conv4, pool_size=[2, 2], strides=2)

re1 = tf.reshape(pool4, [-1, 6 * 6 * 128])

# 全连接层
dense1 = tf.layers.dense(inputs=re1,
                         units=1024,
                         activation=tf.nn.relu,
                         kernel_initializer=tf.truncated_normal_initializer(stddev=0.01),
                         kernel_regularizer=tf.contrib.layers.l2_regularizer(0.003))
dense2 = tf.layers.dense(inputs=dense1,
                         units=512,
                         activation=tf.nn.relu,
                         kernel_initializer=tf.truncated_normal_initializer(stddev=0.01),
                         kernel_regularizer=tf.contrib.layers.l2_regularizer(0.003))
logits = tf.layers.dense(inputs=dense2,
                         units=5,  # output category
                         activation=None,
                         kernel_initializer=tf.truncated_normal_initializer(stddev=0.01),
                         kernel_regularizer=tf.contrib.layers.l2_regularizer(0.003))
# ---------------------------网络结束---------------------------

loss = tf.losses.sparse_softmax_cross_entropy(labels=y_, logits=logits)
train_op = tf.train.AdamOptimizer(learning_rate=0.001).minimize(loss)
correct_prediction = tf.equal(tf.cast(tf.argmax(logits, 1), tf.int32), y_)
acc = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))


# 定义一个函数,按批次取数据
def minibatches(inputs=None, targets=None, batch_size=None, shuffle=False):
    assert len(inputs) == len(targets)
    if shuffle:
        indices = np.arange(len(inputs))
        np.random.shuffle(indices)
    for start_idx in range(0, len(inputs) - batch_size + 1, batch_size):
        if shuffle:
            excerpt = indices[start_idx:start_idx + batch_size]
        else:
            excerpt = slice(start_idx, start_idx + batch_size)
        yield inputs[excerpt], targets[excerpt]


# 训练和测试数据,可将n_epoch设置更大一些

n_epoch = 10
batch_size = 64
sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
for epoch in range(n_epoch):
    start_time = time.time()

    # training
    train_loss, train_acc, n_batch = 0, 0, 0
    for x_train_a, y_train_a in minibatches(x_train, y_train, batch_size, shuffle=True):
        _, err, ac = sess.run([train_op, loss, acc], feed_dict={x: x_train_a, y_: y_train_a})
        train_loss += err;
        train_acc += ac;
        n_batch += 1
    print("   train loss: %f" % (train_loss / n_batch))
    print("   train acc: %f" % (train_acc / n_batch))

    # validation
    val_loss, val_acc, n_batch = 0, 0, 0
    for x_val_a, y_val_a in minibatches(x_val, y_val, batch_size, shuffle=False):
        err, ac = sess.run([loss, acc], feed_dict={x: x_val_a, y_: y_val_a})
        val_loss += err;
        val_acc += ac;
        n_batch += 1
    print("   validation loss: %f" % (val_loss / n_batch))
    print("   validation acc: %f" % (val_acc / n_batch))

[Python人工智能] 十.Tensorflow+Opencv实现CNN自定义图像分类案例及与机器学习KNN图像分类算法对比 从本专栏开始,作者正式开始研究Python深度学习、神经网络及人工智能相关知识。前一篇详细讲解了gensim词向量Word2Vec安装、基础用法,并实现《庆余年》中文短文本相似度计算及多个案例,很幸运被CSDN推荐至封面。本篇文章主要通过Tensorflow+Opencv实现CNN自定义图像分类案例,它能解决我们现实论文或实践中的图像分类问题,并与机器学习的图像分类算法进行对比实验。基础性文章,希望对您有所帮助,如果文章中存在错误或不足之处,还请海涵~ 阅读详情

相关推荐

使用卷积神经网络(CNN)进行图像分类与识别

本文介绍了卷积神经网络(CNN)的基本原理和结构,并通过一个简单的实例展示了如何使用Python和TensorFlow库搭建CNN模型,对CIFAR-10数据集进行图像分类和识别。你可以在此基础上尝试不同的模型结构、优化方法和数据预处理技巧,以提高模型的性能。同时,可以将此方法应用于其他图像分类问题,如手写数字识别、人脸识别和场景分类等。

a871923942的博客 5964

利用深度学习进行遥感图像场景分类.rar

tensorflow为后端的keras框架实现遥感场景分类,使用的模型为VGG16和Resnet50,可以从头自己训练模型,也可以使用迁移学习,进行模型微调

CNN图像分类项目实战:Keras和TensorFlow的运用

Keras是一个开源的神经网络库,最初由François Chollet在2015年发布,旨在实现快速实验的能力。由于其易用性和灵活性,Keras很快在深度学习社区中获得了广泛的认可和支持。Keras的计理念深受Theano和TensorFlow的影响,同时也从中吸收了大量优点,如动态计算图以及高效的CPU和GPU运算支持。Keras在发展过程中逐步提供了更多的功能和接口,以满足复杂模型构建的需求。最初,Keras仅支持序列模型的构建,但后来加入了函数式API,以支持更复杂的网络结构。

weixin_36151775的博客 1015

tensorflow 1.0用CNN进行图像分类

tensorflow升级到1.0之后,增加了一些高级模块: 如tf.layers, tf.metrics, 和tf.losses,使得代码稍微有些简化。 任务:花卉分类 版本:tensorflow 1.0 数据:flower-photos 花总共有五类,分别放在5个文件夹下。 闲话不多说,直接上代码,希望大家能看懂:) 复制代码 # -*- coding: utf-8 -*- from skimage import io,transform import glob import os import tensorflow as tf import numpy as np import tim

【人工智能】实验二基于CNN图像分类

这个算是个记录吧,这个是黑龙江大学-马吉权老师的人工智能课,这个老师听说科研很好,但是老师代码让大伙自学,上课内容主要是概念,没有实际代码,不过没有期末考试,还挺好过的。实验的话就是把用cifar100把图片分割为32*32 60k,然后的话主要是分为4个步骤,即然后整个分割内容是这样的。

LMGhost的博客 814

TensorFlow小试牛刀(1):CNN图像分类

深度学习不能只是一味的看paper,看源码,必须要亲自动手写代码。最近好好学了下TensorFlow,顺便自己写了一个简单的CNN来实现图像分类,也遇到了不少问题,但都一一解决,也算是收获满满。重在实现,不在结果。 首先我使用的数据集是CIFAR-10IDE使用的是ipython notebook(并不好用,建议少用ipynb)模型结构层数比较少,因为我的笔记本并跑不快。 两个卷积层,两个全

Miracle_ma的专栏 4846

【神经网络】(3) 卷积神经网络(CNN),案例:动物三分类,附python完整代码

各位同学好,今天和大家分享一下TensorFlow2.0深度学习中卷积神经网络的案例。现在有猫、狗、熊猫图片一千张,构建卷积神经网络实现图像的分类预测。 1. 数据加载 将训练测试数据划分好后放在同一个文件目录下,使用tf.keras.preprocessing.image_dataset_from_directory()函数构造数据集。函数的具体用法见:https://blog.csdn.net/qq_40108803/article/details/110408217 对训练数据和验证数据进行on

博观而约取,厚积而薄发 1万+

【深度学习-第3篇】使用MATLAB快速实现CNN分类(模式识别)任务,含一维、二维、维数据演示案例

在本文中,我们将介绍如何使用 MATLAB 中的 Convolutional Neural Network(CNN)进行分类任务。我们将使用 MATLAB 的 Deep Learning Toolbox 来创建、训练和评估 CNN

fengzhuqiaoqiu的博客 1万+

CNN实现花卉图片分类识别

CNN

CrimsonK的博客 2万+

深度学习极简实战:200行代码跑通端到端图像分类

深度学习入门常陷于理论堆砌与环境崩坏的双重困境,而真正可落地的实践需回归‘最小可行认知闭环’——从张量形状理解、数据加载调试到模型轻量部署。本文聚焦图像分类这一基础任务,以NumPy+TensorFlow/Keras极简工具链(仅4个核心包)为载体,详解真实场景中必遇的维度陷阱、HEIC格式报错、梯度消失诊断及TFLite量化部署等关键环节。通过自制噪声数据集、手写数据生成器与图监控法,将抽象原理锚定在具体报错和可视化反馈上,让转行者、产线工程师与自学学生能在单卡12分钟内亲手训练并部署一个有呼吸的AI模

weixin_30561425的博客 568

TensorFlow2 学习——CNN图像分类

文章目录TensorFlow2 学习——CNN图像分类1. 导包2. 图像分类 fashion_mnist3. 图像分类 cat_vs_dog3.1 原始数据3.2 利用Dataset加载图片3.3 构建CNN模型,并训练 TensorFlow2 学习——CNN图像分类 1. 导包 import matplotlib.pyplot as plt import numpy as np import ......

蒋含竹的博客 8833

使用卷积神经网络进行图像分类

介绍卷积神经网络属于深度学习的子域。深度学习中的算法以与人脑相同的方式来处理信息,但其规模很小,因为我们的大脑太复杂了(我们的大脑大约有860亿个神经元)。为什么使用CNN进行图像分类?图...

深度学习与计算机视觉 1万+

详解tensorflow训练自己的数据集实现CNN图像分类

     出处: https://www.jb51.net/article/134623.htm利用卷积神经网络训练图像数据分为以下几个步骤1.读取图片文件2.产生用于训练的批次3.定义训练的模型(包括初始化参数,卷积、池化层等参数、网络)4.训练1 读取图片文件 def get_files(filename): class_train = [] label_train = [] for t...

王爷的CSDN 3万+

Tensorflow2.0使用卷积神经网络CNN预测fashion_mnist数据集解决图像分类问题

Tensorflow2.0使用CNN预测fashion_mnist数据集解决图像分类问题1、数据导入2、卷积神经网络CNN2.1、卷积神经网络CNN结构搭建2.2、编译训练2.2.1、CNN编译训练2.2.2、metrics介绍2.3、绘制损失函数和准确率图像3、在测试集上进行模型评价4、模型预测效果展示 1、数据导入 import pandas as pd import tensorflow a...

weixin_39559994的博客 3523

利用Tensorflow2构建CNN并用于图像分类

利用Tensorflow2构建CNN并用于图像分类 本文将使用自下而上的方法,从讨论CNN的基本板块构建开始。然后将深入研究CNN的体系结构,并探索如何在TensorFlow中实现CNN。本文包含以下内容: 一维和二维的卷积运算 卷积神经网络结构的构建 使用Tensorflow构建深度卷积神经网络 利用数据扩充技术提高模型泛化性能 实现一个基于人脸图像的CNN分类器来预测个人性别 from IPython.display import Image %matplotlib inline

AIHUBEI的博客 3206

深度学习实战:使用TensorFlow构建卷积神经网络(CNN

卷积神经网络(CNN)是深度学习中一种非常重要的网络结构,广泛应用于图像识别、视频分析和自然语言处理等领域。CNN的核心思想是利用卷积层(Convolutional Layer)和池化层(Pooling Layer)自动提取图像的局部特征,从而减少人工特征工程的需求。

GGDxianv的博客 2664

基于Tensorflow + Opencv 实现CNN自定义图像分类

摘要:本篇文章主要通过Tensorflow+Opencv实现CNN自定义图像分类案例,它能解决我们现实论文或实践中的图像分类问题,并与机器学习的图像分类算法进行对比实验。 本文分享自华为云社区《Tensorflow+Opencv实现CNN自定义图像分类及与KNN图像分类对比》,作者:eastmount 。 一.图像分类 图像分类(Image Classification)是对图像内容进行分类的问题,它利用计算机对图像进行定量分析,把图像或图像中的区域划分为若干个类别,以代替人的视觉判断。图像分类的传统

华为云官方博客 4729

使用 CNN 进行图像分类 - 理解计算机视觉

介绍在计算机视觉中,我们有一个卷积神经网络,它非常适用于计算机视觉任务,例如图像分类、对象检测、图像分割等等。图像分类是当今时代最需要的技术之一,它被用于医疗保健、商业等各个领域,因此,了...

深度学习与计算机视觉 7834
上一篇: Tensorboard 可视化(二)画训练过程
下一篇: CNN提取图片特征,之后用SVM分类
flowrush
博客等级 码龄9年 46粉丝 18原创
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值