VGGNet实现CIFAR-100图像识别-1(数据预处理,one-hot)

2023-11-13

写在最前:这个是和用户id:weixin_55841621的一个合作项目,得到对方允许后写了个心得总结,未经授权不得转载或直接复制使用。初学者,对于一些问题的理解可能不是很到位,请多多指教或者一起讨论~

导入数据

这个是从keras直接导入数据,y标签是用0-99的数字表示,但是从cifar数据官方网站下载的数据中,meta文件包含了y标签的文字表示,即类的语义名字。

# Load data from keras (https://keras.io/api/datasets/cifar100/),
# this will download dataset from https://www.cs.toronto.edu/~kriz/cifar-100-python.tar.gz

(X, y), (X_test, y_test) = tf.keras.datasets.cifar100.load_data(label_mode="fine") # "fine": the labels of 100 subclasses
print(X.shape, y.shape, X_test.shape, y_test.shape) # The dataset contains 50,000 32x32 color training images and 10,000 test images

数据预处理

将y标签的shape从(50000, 1)改成(50000,),为了与张量(tensor)相匹配。

方法1

# Change the shape of y to (50000,)

y = tf.squeeze(y)
y_test = tf.squeeze(y_test) 

print(y.shape)
print(y_test.shape)

type(y)
type(y_test)

# 输出:
# (50000,)
# (10000,)
# tensorflow.python.framework.ops.EagerTensor

方法2

# Change the shape of y to (50000,)

y = y[:,0]
y_test = y_test[:,0]

print(y.shape)
print(y_test.shape)

type(y)
type(y_test)

# 输出:
# (50000,)
# (10000,)
# numpy.ndarray

可能会遇到的问题

两种方法的不同是他们最后生成的数据类型不同,如果使用方法1,在后面拆分训练集和验证集的时候会遇到如下错误:
TypeError: Only integers, slices (:), ellipsis (...), tf.newaxis (None) and scalar tf.int32/tf.int64 tensors are valid indices, got array([36688, 3668, 12964, …, 14020, 49037, 29856])

解决办法

  1. 使用方法2
  2. 先拆分训练集和验证集,再将y的shape从(50000,1)变成(50000,)
  3. 按照这个方法(from_tensor_slices和map),图片来自于B站视频在这里插入图片描述

Normalization和拆分训练集、验证集

# Normalization

X = X.astype('float32')/255.0 # tf.cast(X, dtype=tf.float32)/255.0
X_test = X_test.astype('float32')/255.0
# Split the data into training and validation set

X_train, X_valid, y_train, y_valid = train_test_split(X, y, shuffle=True, random_state=85, test_size=0.1)
print(X_train.shape, y_train.shape, X_valid.shape, y_valid.shape)

One-hot编码

关于one-hot我们有两种选择,

  1. one-hot编码 (softmax激活函数需要),加上softmax激活函数,加上’categorical_crossentropy’损失函数,VGGNet是采用了这种方法。代码如下:
# Change class labels to binary class matrix
y_train_cate = tf.keras.utils.to_categorical(y_train, 100)
print(y_train_cate.shape)

y_valid_cate = tf.keras.utils.to_categorical(y_valid, 100)
print(y_valid_cate.shape)

y_test_cate = tf.keras.utils.to_categorical(y_test, 100)
print(y_test_cate.shape)
  1. 不采用one-hot编码,这个时候我们y标签的shape是(50000,1),加上’SparseCategoricalCrossentropy’损失函数,设置参数from_logits=True,来应用softmax激活函数,另一篇博文AlexNet采用这种方法。

未完待续,接下来请看另一篇博文:VGGNet实现CIFAR-100图像识别-2(图像增强/ImageDataGenerator)

VGGNet实现CIFAR-100图像识别-2(图像增强/ImageDataGenerator)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VGGNet实现CIFAR-100图像识别-1(数据预处理,one-hot) 的相关文章

随机推荐

  • 小程序实现毛玻璃的效果

    利用css的filter这个属性实现 在有弹框弹出的时候背景出现高斯模糊的效果 写个小例子记录一下 这个是背景是地图的情况下 做的处理 不管是文字还是图片什么的 在弹出框出来的时候给背景添加filter blur 20rpx 中间值的模糊程
  • Linux虚拟机sqlite数据库安装教程、命令实现sqlite

    参考 Linux虚拟机sqlite数据库安装教程 作者 图触靓 发布时间 2021 04 08 19 07 56 网址 https blog csdn net bhbhhyg article details 115528254 一 在官网下
  • Spark性能调优之广播变量

    一 背景 举例来说 虽然是举例 但是基本都是用我们实际在企业中用的生产环境中的配置和经验来说明的 50个executor 1000个task 一个map 10M 默认情况下 1000个task 1000份副本 10G的数据 网络传输 在集群
  • 帆软报表FineReport中数据连接之Tomcat配置JNDI连接

    1 问题描述 在帆软报表FineReport中 通过JNDI方式定义数据连接 首先在Tomcat服务器配置好JNDI 然后在设计器中直接调用JNDI的名字 即可成功使用JNDI连接 连接步骤如下 2 实现步骤 使用版本及环境 下面以Wind
  • 【ES6】Generator函数

    文章目录 一 声明Generator函数 二 调用 三 next 四 yield 五 return与yield区别 一 声明Generator函数 Generator函数 又称生成器函数 是ES6的一个重要的新特性 普通函数用functio
  • 魏副业而战:闲鱼推广显示设备异常怎么办

    我是魏哥 与其在家躺平 不如魏副业而战 今天是三八节 祝各位小姐姐们节日快乐 做网络项目 不免会遇到各种各样的问题 有人勇往直前 找方法 有人选择退缩 不同的选择 不同的结果 那么 遇到问题 我们应该怎么做呢 魏哥建议问度娘 一般情况下 我
  • VMWare Workstation 16 安装 Ubuntu 22.04 LTS

    最近想编译Android8 1 系统源码 不太想安装双系统 先尝试用虚拟机安装Ubuntu来编译试试 过程中也遇到一些特殊的错误 因此做了一次记录 VMWare Workstation 16 的下载和安装这里不作介绍 网上也有很多注册码可用
  • (Animator详解一)mixamo动画导入Unity的一些配置

    Mixamo是Adobe公司出品的免费动画库 可商用 软件分为characters 角色 Animations 动画 两个部分 下方的搜索框可以搜寻你想要的动作动画 网址为 Mixamo 搜索框的子菜单表示动画的类别 当我们的项目需要角色动
  • 【Xilinx Vivado时序分析/约束系列2】FPGA开发时序分析/约束-建立时间

    目录 基本概念 数据结束时间 Data finish time 保持时间门限 保持时间余量 Hold Slack 基本概念 数据结束时间 Data finish time 之前解释了数据达到的时间 对于data arrival time T
  • cpu矿工cpuminer-multi编译与使用

    文章目录 编译步骤 cpuminer multi 矿工运行 cpuminer multi有很多不同前辈开发 这里选用star最多且最流行的 lucasjones cpuminer multi 在编译中遇到了很多坑 这里全部整合到流程中 如果
  • nimg 文件服务器,NIMG-45. DEEP LEARNING-BASED PERITUMORAL MICROSTRUCTURE MAPPING IN GLIOBLASTOMAS USING FR...

    摘要 PURPOSE Characterization of the peritumoral microenvironment is a widely researched but as yet unsolved problem Deter
  • K-近邻算法预测电影类型

    K 近邻算法预测电影类型 k 近邻算法是一种比较简单 但是在一些方面又有很多作用的算法 比较常用的就是推荐入住位置 或者推荐入住酒店等等 K 近邻算法的原理 就是根据特征值 计算出离自己最近的那个分类 自己也属于那个类别 K 近邻是一种分类
  • 吴恩达机器学习(三) 无监督学习

    Unsupervised Learning Unsupervised learning allows us to approach problems with little or no idea what our results shoul
  • Django框架

    目录 目录 一 虚拟环境 1 什么是虚拟环境 2 作用 3 wondows下安装使用 二 Django框架 1 安装Django 2 拓展 虚拟机和虚拟环境问题 2 1虚拟机的三种网络模式 3 创建Django项目 3 1完整创建Djang
  • Python中Print()函数的用法___实例详解(全,例多)

    Python中Print 函数的用法 实例详解 全 例多 目 录 一 print 函数的语法 二 print 打印输出文本 三 print 中空格的使用方法 四 Print 换行 五 区隔符 sep 六 制表符 t 七 输出数学表达式 八
  • Qt:可视化UI设计

    1 创建项目 修改组件的对象名字和显示文本内容 创建一个 Widget Application 项目类 QDialog 在创建窗体时选择基类 QDialog 生成的类命名为 QWDialog 并选择生成窗体 在界面设计时 对需要访问的组件修
  • AES 配合mybaties 实现指定字段自动加解密

    1 加密工具类 Slf4j public class AESUtil 密钥长度 128 192 or 256 private static final int KEY SIZE 256 加密 解密算法名称 private static fi
  • C/C++从字符串中提取出数字的方法回顾

    在对格式化的数据进行处理的时候 很多时候需要在字符串中进行数据的提取 如果使用Oracle数据库 可以用里面的非常强大的sqlldr功能进行数据的提取和导入 在C C 中 可以自定义个方法提取出数字字符串 再使用atoi atof之类的方法
  • 颜色空间之RGB与YUV

    此篇是我在学习中做的归纳与总结 其中如果存在版权或知识错误或问题请直接联系我 欢迎留言 PS 本着知识共享的原则 此篇博客可以转载 但请标明出处 RGB CIE1931 RGB系统选择了700nm R 546 1nm G 435 8nm B
  • VGGNet实现CIFAR-100图像识别-1(数据预处理,one-hot)

    VGGNet CIFAR 100 导入数据 数据预处理 方法1 方法2 可能会遇到的问题 解决办法 Normalization和拆分训练集 验证集 One hot编码 未完待续 接下来请看另一篇博文 VGGNet实现CIFAR 100图像识