CIFAR100与mnist数据集一样,但是复杂一些,基于CNN对CIFAR100实现的原理与对mnist的操作大同小异,程序所采用的CNN网络为13层的VGG网络。
经过网络处理过程如下所示:

代码如下:

import  tensorflow as tf
from    tensorflow.keras import layers, optimizers, datasets, Sequential
import  osos.environ['TF_CPP_MIN_LOG_LEVEL']='2'
tf.random.set_seed(2345)
#卷积层+池化层
conv_layers = [ # 5 units of conv + max pooling# unit 1layers.Conv2D(64, kernel_size=[3, 3], padding="same", activation=tf.nn.relu),layers.Conv2D(64, kernel_size=[3, 3], padding="same", activation=tf.nn.relu),layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same'),# unit 2layers.Conv2D(128, kernel_size=[3, 3], padding="same", activation=tf.nn.relu),layers.Conv2D(128, kernel_size=[3, 3], padding="same", activation=tf.nn.relu),layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same'),# unit 3layers.Conv2D(256, kernel_size=[3, 3], padding="same", activation=tf.nn.relu),layers.Conv2D(256, kernel_size=[3, 3], padding="same", activation=tf.nn.relu),layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same'),# unit 4layers.Conv2D(512, kernel_size=[3, 3], padding="same", activation=tf.nn.relu),layers.Conv2D(512, kernel_size=[3, 3], padding="same", activation=tf.nn.relu),layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same'),# unit 5layers.Conv2D(512, kernel_size=[3, 3], padding="same", activation=tf.nn.relu),layers.Conv2D(512, kernel_size=[3, 3], padding="same", activation=tf.nn.relu),layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same')
]
#对输入图片进行数据预处理
def preprocess(x, y):# [0~1]x = tf.cast(x, dtype=tf.float32) / 255.#在0~1之间y = tf.cast(y, dtype=tf.int32)return x,y(x,y), (x_test, y_test) = datasets.cifar100.load_data()
y = tf.squeeze(y, axis=1)#y一开始并不是一个维度,所以需要把第二个维度挤压掉。
y_test = tf.squeeze(y_test, axis=1)train_db = tf.data.Dataset.from_tensor_slices((x,y))
train_db = train_db.shuffle(1000).map(preprocess).batch(128)test_db = tf.data.Dataset.from_tensor_slices((x_test,y_test))
test_db = test_db.map(preprocess).batch(64)def main():# [b, 32, 32, 3] => [b, 1, 1, 512]conv_net = Sequential(conv_layers)#全连接层fc_net = Sequential([layers.Dense(256, activation=tf.nn.relu),layers.Dense(128, activation=tf.nn.relu),layers.Dense(100, activation=None),])conv_net.build(input_shape=[None, 32, 32, 3])fc_net.build(input_shape=[None, 512])#学习率optimizer = optimizers.Adam(lr=1e-4)# [1, 2] + [3, 4] => [1, 2, 3, 4]variables = conv_net.trainable_variables + fc_net.trainable_variablesfor epoch in range(50):for step, (x,y) in enumerate(train_db):with tf.GradientTape() as tape:# [b, 32, 32, 3] => [b, 1, 1, 512]out = conv_net(x)# flatten, => [b, 512]out = tf.reshape(out, [-1, 512])# [b, 512] => [b, 100]logits = fc_net(out)# [b] => [b, 100]y_onehot = tf.one_hot(y, depth=100)# compute lossloss = tf.losses.categorical_crossentropy(y_onehot, logits, from_logits=True)loss = tf.reduce_mean(loss)grads = tape.gradient(loss, variables)optimizer.apply_gradients(zip(grads, variables))if step %100 == 0:print(epoch, step, 'loss:', float(loss))total_num = 0total_correct = 0for x,y in test_db:out = conv_net(x)out = tf.reshape(out, [-1, 512])logits = fc_net(out)prob = tf.nn.softmax(logits, axis=1)pred = tf.argmax(prob, axis=1)pred = tf.cast(pred, dtype=tf.int32)correct = tf.cast(tf.equal(pred, y), dtype=tf.int32)correct = tf.reduce_sum(correct)total_num += x.shape[0]total_correct += int(correct)acc = total_correct / total_numprint(epoch, 'acc:', acc)
if __name__ == '__main__':main()

最终的训练模型对于测试集的正确率并不是很高,而且训练起来耗时比较严重,相比而言Mnist数据集训练的效果和效率就特别高了。

基于CNN实现CIFAR100识别-tensorflow2.0实现相关推荐

  1. 作业6:基于CNN的XO识别 深度学习 手搓卷积代码

    目录 一.实现卷积 池化 激活 代码 1.numpy版本 生成图像 卷积核生成 卷积操作 池化操作 最大池化 平均池化 激活操作 2.pytorch版本(利用pytorch框架) 2.1相关函数 2. ...

  2. NNDL 作业6:基于CNN的XO识别

    实现卷积-池化-激活 Numpy版本:手工实现 卷积-池化-激活 自定义卷积算子.池化算子实现,源码如下: import numpy as npx = np.array([[-1, -1, -1, - ...

  3. 毕业设计:基于CNN做人脸识别

    基于CNN做人脸识别 首先,我是考虑,这系统在Windows下做还是在Linux.Ubuntu下做比较好? 然后,我都检测过,Windows下可以用python.anaconda写代码都可以.当然,和 ...

  4. 基于cnn的人脸识别_鬼都藏不住,人脸识别新突破!就算遮住半张脸也能100%被识别...

    转自:新智元 如涉版权请加编辑微信iwish89联系 哲学园鸣谢 新智元报道 来源:sciencedirect 编辑:金磊,元子 [新智元导读]众所周知,人脸识别在摄像头无法捕捉到完整面部图像的情况下 ...

  5. 基于CNN的手写体识别与GUI系统设计(新手快进来!)

    目录 1. 写在前面 2. 环境搭建 3. 卷积神经网络 4. 数字手写体识别实现 1. 写在前面     这是我的本科毕设,今天终于差不多降完重了哈哈,总共耗时一个半月,写完赶紧趁热打铁来记录一下整 ...

  6. 基于cnn的人脸识别_基于卷积神经网络(CNN)的人脸在线识别系统

    微信搜索"AI大道理",选择"置顶"公众号 重磅干货,深入讲解AI大道理 ------ 本设计研究人脸识别技术,基于卷积神经网络构建了一套人脸在线检测识别系统, ...

  7. 基于CNN的表情识别(FER)pytorch实现

    Report for FER Jian Tang Abstract 我们使用卷积神经网络(CNN)实现了baby的面部表情识别(FER). 工程代码: https://github.com/JianT ...

  8. 深度学习之基于CNN实现天气识别

    其实和猫狗大战还有上一篇博客的代码差不太多,但是中间出现了新的问题. 1.导入库 import numpy as np import tensorflow as tf import os,PIL im ...

  9. 基于CNN的花卉识别

    程序和数据集地址:https://download.csdn.net/my 数据集准备: 如图是五种类别的花卉数据集,分别放在五个文件夹. 训练神经网络模型文件在CNN中 定义数据集地址和模型保存地址 ...

最新文章

  1. 不断审视自己,做一个长期主义者
  2. sharepoint指定的人可以看到列表项
  3. 按钮更新datagridview
  4. 浙江高考艺术类2021年成绩查询,2021年浙江美术高考成绩查询网址:https://www.zjzs.net/...
  5. BugkuCTF-Misc:隐写3
  6. 论接单报价管理与ERP信息化管理的重要性
  7. point-position2修改版
  8. webservice第一篇【介绍、Scoket、http调用、wsimport调用】
  9. Eclipse关联JavaDoc
  10. DBD::Oracle的库文件报失问题
  11. CoolFire系列讲座 第2讲
  12. window计算机桌面的组成,Windows 10桌面的组成,Win10桌面介绍
  13. java实现阿里云图片文字识别
  14. 启用邪恶-使用XmlSerializer和一些魔术在Xml中隧道化Xml
  15. 淘宝客接入PHP(一)
  16. 线下WINDOWS主机挂载华为云存储
  17. MTK的OS是Nucleus
  18. 程序员展望未来八个小小技巧
  19. jQuery(入门选择器)
  20. 外贸开发信标题如何写?7个例子

热门文章

  1. swift5导航栏标题文字属性设置
  2. 软件质量模型 测试设计方法,质量模型-可靠性测试
  3. 时间戳转换(各种格式的都有,年月日 时分秒 周)
  4. vue = 什么意思_记录使用@vue/cli搭建Vue3项目完整流程
  5. 报头中的偏移量作用_C语言中函数的实现
  6. distinct作用于后面所有的列吗_所有的鱼缸都适合放底砂吗?有的沙子让观赏鱼变美,有的起反作用...
  7. c# list 容量_C#中数组、ArrayList和List三者的区别 转
  8. 场景数据的动态更新setDataVariance(osg::Object::DYNAMIC) (转)
  9. pycharm 类型注释_学习Python第一步,变量与数据类型
  10. Android中保存数据的三种方法