cifar-10-TensorFlow

2023-12-12 12:32
文章标签 tensorflow cifar

本文主要是介绍cifar-10-TensorFlow,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据集

    Cifar-10由60000张32*32的RGB彩色图片构成,一共包含有飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船、卡车这10个类别。50000张训练,10000张测试。
    比较知名的模型如AlexNet、NIN、ResNet等都曾在Cifar-10数据集上来评价自己的性能。
    它还有一姐妹级的数据集Cifar-100,顾名思义就是包含100个类别,数据更加复杂。关于Cifar数据集的相关介绍以及数据的下载可见官网。
    正是因为Cifar-10数据集不大、类别明确、获取方便、训练简单,同时模型的可参照性强,因此作为深度学习的初学者作为一个进阶的内容,再适合不过了

import numpy as np
# 序列化和反序列化
import pickle
from sklearn.preprocessing import OneHotEncoder
import warnings
warnings.filterwarnings('ignore')
import tensorflow as tf
数据加载
def unpickle(file):import picklewith open(file, 'rb') as fo:dict = pickle.load(fo, encoding='ISO-8859-1')return dict# def unpickle(file):
#     import pickle
#     with open(file, 'rb') as fo:
#         dict = pickle.load(fo, encoding='bytes') #读进来的是二进制
#     return dictlabels = []
X_train = []
for i in range(1,6):data = unpickle('./cifar-10-batches-py/data_batch_%d'%(i))labels.append(data['labels'])X_train.append(data['data'])# 将list类型转换为ndarray
y_train = np.array(labels).reshape(-1) #0-9
X_train = np.array(X_train)# reshape
X_train = X_train.reshape(-1,3072) #32*32*3=3072 50000个数据# 目标值概率
one_hot = OneHotEncoder()
y_train =one_hot.fit_transform(y_train.reshape(-1,1)).toarray()
display(X_train.shape,y_train.shape)
#(50000, 3072)
#(50000, 10)

网络结构

    conv1->relu1->pool1->conv2->relu2->pool2->conv3->relu3>pool3->fc1->dropout1->fc2->out. 三层网络 两个全连接层
    所有的卷积核采用的都是3x3大小, pool的核也是3x3,步长为2x2.
    中间加入bn(batch_ normalization)层.batch_size设置成100, 迭代500次, 之后减小学习率. 归一化

构建神经网络
X = tf.placeholder(dtype=tf.float32,shape = [None,3072])
y = tf.placeholder(dtype=tf.float32,shape = [None,10])
kp = tf.placeholder(dtype=tf.float32)### !!! 给成常量了
def gen_v(shape):return tf.Variable(tf.truncated_normal(shape = shape))#生成改进版的正态分布 只要中间概率大的部分def conv(input_,filter_,b):conv = tf.nn.relu(tf.nn.conv2d(input_,filter_,strides=[1,1,1,1],padding='SAME') + b)return tf.nn.max_pool(conv,[1,3,3,1],[1,2,2,1],'SAME')def net_work(input_,kp):#     形状改变,4维input_ = tf.reshape(input_,shape = [-1,32,32,3])
#     第一层filter1 = gen_v(shape = [3,3,3,64])b1 = gen_v(shape = [64])conv1 = conv(input_,filter1,b1)
#     归一化conv1 = tf.layers.batch_normalization(conv1,training=True)#layer 层 batch一批
#     第二层filter2 = gen_v([3,3,64,128])b2 = gen_v(shape = [128])conv2 = conv(conv1,filter2,b2)conv2 = tf.layers.batch_normalization(conv2,training=True)#     第三层filter3 = gen_v([3,3,128,256])b3 = gen_v([256])conv3 = conv(conv2,filter3,b3)conv3 = tf.layers.batch_normalization(conv3,training=True)#     第一层全连接层dense = tf.reshape(conv3,shape = [-1,4*4*256]) #数据形状改变一下fc1_w = gen_v(shape = [4*4*256,1024])fc1_b = gen_v([1024])fc1 = tf.matmul(dense,fc1_w) + fc1_bfc1 = tf.layers.batch_normalization(fc1,training=True)fc1 = tf.nn.relu(fc1)
#     fc1.shape = [-1,1024]#     dropoutdp = tf.nn.dropout(fc1,keep_prob=kp) #保留比例#     第二层全连接层fc2_w = gen_v(shape = [1024,1024])fc2_b = gen_v(shape = [1024])fc2 = tf.nn.relu(tf.layers.batch_normalization(tf.matmul(dp,fc2_w) + fc2_b,training=True))#     输出层out_w = gen_v(shape = [1024,10])out_b = gen_v(shape = [10])out = tf.matmul(fc2,out_w) + out_breturn out
损失函数准确率
out = net_work(X,kp)loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(labels=y,logits=out))# 准确率
y_ = tf.nn.softmax(out)# equal 相当于 == 
accuracy = tf.reduce_mean(tf.cast(tf.equal(tf.argmax(y,axis = -1),tf.argmax(y_,axis = 1)),tf.float16))
#tf.cast([True,True,True,False,False,True])
#[1,1,1,0,1]
accuracy #准确率
#<tf.Tensor 'Mean_8:0' shape=() dtype=float16>
最后化
opt = tf.train.AdamOptimizer().minimize(loss)
opt
#<tf.Operation 'Adam_3' type=NoOp>
开启训练
epoches = 50000
saver = tf.train.Saver()
X_train.shape
y_train.shape
#(50000, 10)index = 0
def next_batch(X,y):global indexbatch_X = X[index*128:(index+1)*128]batch_y = y[index*128:(index+1)*128]index+=1if index == 390: #50000//128=390 一批是128个数据index = 0return batch_X,batch_ytest = unpickle('./cifar-10-batches-py/test_batch')
y_test = test['labels']
y_test = np.array(y_test)
X_test = test['data']
y_test = one_hot.transform(y_test.reshape(-1,1)).toarray()
y_test[:10]
#array([[0., 0., 0., 1., 0., 0., 0., 0., 0., 0.],
#       [0., 0., 0., 0., 0., 0., 0., 0., 1., 0.],
#       [0., 0., 0., 0., 0., 0., 0., 0., 1., 0.]])with tf.Session() as sess:sess.run(tf.global_variables_initializer())for i in range(epoches):batch_X,batch_y = next_batch(X_train,y_train)opt_,loss_ = sess.run([opt,loss],feed_dict = {X:batch_X,y:batch_y,kp:0.5})print('----------------------------',loss_)if i % 100 == 0:score_test = sess.run(accuracy,feed_dict = {X:X_test,y:y_test,kp:1.0})score_train = sess.run(accuracy,feed_dict = {X:batch_X,y:batch_y,kp:1.0})print('iter count:%d。mini_batch loss:%0.4f。训练数据上的准确率:%0.4f。测试数据上准确率:%0.4f'%(i+1,loss_,score_train,score_test))

这篇关于cifar-10-TensorFlow的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/484658

相关文章

win10不用anaconda安装tensorflow-cpu并导入pycharm

记录一下防止忘了 一、前提:已经安装了python3.6.4,想用tensorflow的包 二、在pycharm中File-Settings-Project Interpreter点“+”号导入很慢,所以直接在cmd中使用 pip install -i https://mirrors.aliyun.com/pypi/simple tensorflow-cpu下载好,默认下载的tensorflow

稀疏自编码器tensorflow

自编码器是一种无监督机器学习算法,通过计算自编码的输出与原输入的误差,不断调节自编码器的参数,最终训练出模型。自编码器可以用于压缩输入信息,提取有用的输入特征。如,[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]四比特信息可以压缩成两位,[0,0],[1,0],[1,1],[0,1]。此时,自编码器的中间层的神经元个数为2。但是,有时中间隐藏层的神经元

Tensorflow实现与门感知机

感知机是最简单的神经网络,通过输入,进行加权处理,经过刺激函数,得到输出。通过输出计算误差,调整权重,最终,得到合适的加权函数。 今天,我通过tensorflow实现简单的感知机。 首先,初始化变量:     num_nodes = 2     output_units = 1     w = tf.Variable(tf.truncated_normal([num_nodes,output

Tensorflow lstm实现的小说撰写预测

最近,在研究深度学习方面的知识,结合Tensorflow,完成了基于lstm的小说预测程序demo。 lstm是改进的RNN,具有长期记忆功能,相对于RNN,增加了多个门来控制输入与输出。原理方面的知识网上很多,在此,我只是将我短暂学习的tensorflow写一个预测小说的demo,如果有错误,还望大家指出。 1、将小说进行分词,去除空格,建立词汇表与id的字典,生成初始输入模型的x与y d

Deepin Linux安装TensorFlow

Deepin Linux安装TensorFlow 1.首先检查是否有Python,一般deepin系统都自带python的。   2.安装pip Sudo appt-get install pip来安装pip,如果失败就先更新一下sudo apt-get updata,然后再sudo apt-get install pip,如果定位失败,就sudo apt-get install pyth

终止distributed tensorflow的ps进程

1.直接终止: $ ps -ef | grep python | grep 文件名 | awk {'print $2'} | xargs kill文件名为当前运行的程序,名称如:distribute.py 2.查找pid,后kill: $ ps -ef | grep python | grep 文件名 | awk {'print $2'}$ kill -9 <pid>

Python(TensorFlow和PyTorch)两种显微镜成像重建算法模型(显微镜学)

🎯要点 🎯受激发射损耗显微镜算法模型:🖊恢复嘈杂二维和三维图像 | 🖊模型架构:恢复上下文信息和超分辨率图像 | 🖊使用嘈杂和高信噪比的图像训练模型 | 🖊准备半合成训练集 | 🖊优化沙邦尼尔损失和边缘损失 | 🖊使用峰值信噪比、归一化均方误差和多尺度结构相似性指数量化结果 | 🎯训练荧光显微镜模型和对抗网络图形转换模型 🍪语言内容分比 🍇Python图像归一化

【tensorflow CNN】构建cnn网络,识别mnist手写数字识别

#coding:utf8"""构建cnn网络,识别mnistinput conv1 padding max_pool([2,2],strides=[2,2]) conv2 x[-1,28,28,1] 卷积 [5,5,1,32] -> [-1,24,24,32]->[-1,28,

【tensorflow 全连接神经网络】 minist 手写数字识别

主要内容: 使用tensorflow构建一个三层全连接传统神经网络,作为字符识别的多分类器。通过字符图片预测对应的数字,对mnist数据集进行预测。 # coding: utf-8from tensorflow.examples.tutorials.mnist import input_dataimport tensorflow as tfimport matplotlib.pyplot

【tensorflow 使用错误】tensorflow2.0 过程中出现 Error : Failed to get convolution algorithm

如果在使用 tensorflow 过程中出现 Error : Failed to get convolution algorithm ,这是因为显卡内存被耗尽了。 解决办法: 在代码的开头加入如下两句,动态分配显存 physical_device = tf.config.experimental.list_physical_devices("GPU")tf.config.experiment