深度学习之cifar-10⑤——十分类(cifar_10_VGG-9)

这个代码与前面代码类似,只是用的模型不一样,这里运用的是VGG-9模型,详情注释请看 深度学习之cifar-10④——十分类(cifar_10_Alexnet)

import tensorflow as tf
import numpy as np
import pickle
import os

cifar_dir = '../../datas/cifar-10-batches-py'

def load_data(filename):
    with open(filename,'rb') as f:
        data = pickle.load(f,encoding='bytes')
        return data[b'data'],data[b'labels']

class Cifar_Data:
    def __init__(self,filenames,need_shuffle):
        all_data = []
        all_labels = []
        for filename in filenames:
            data , labels = load_data(filename)
            all_data.append(data)
            all_labels.append(labels)

        self.data = np.vstack(all_data)
        self.data = self.data / 127.5 - 1
        self.lables = np.hstack(all_labels)

        print(self.data.shape)
        print(self.lables.shape)

        self.num_examples = self.data.shape[0]
        self.indicator = 0
        self.need_shuffle = need_shuffle

        if self.need_shuffle:
            self.shuffle_data()

    def shuffle_data(self):
        p = np.random.permutation(self.num_examples)
        self.data = self.data[p]
        self.lables = self.lables[p]

    def next_batch(self,batch_size):
        end_indicator = self.indicator + batch_size
        if end_indicator>self.num_examples:
            if self.need_shuffle:
                self.shuffle_data()
                self.indicator = 0
                end_indicator = batch_size
            else:
                raise Exception('没有更多的例子')

        if end_indicator > self.num_examples:
            raise Exception('批次大于所有例子')

        batch_data = self.data[self.indicator:end_indicator]
        batch_lables = self.lables[self.indicator:end_indicator]
        self.indicator = end_indicator
        return batch_data,batch_lables

train_filenames = [os.path.join(cifar_dir,'data_batch_%d'%i) for i in range(1,6)]
test_filenames = [os.path.join(cifar_dir,'test_batch')]

train_data = Cifar_Data(train_filenames,True)
test_data = Cifar_Data(test_filenames,False)

x = tf.placeholder(tf.float32,[None,3072])
y = tf.placeholder(tf.int64,[None])

x_img = tf.reshape(x,[-1,3,32,32])
# 32*32
x_img = tf.transpose(x_img,perm=[0,2,3,1])

conv1 = tf.layers.conv2d(x_img,8,(3,3),padding='same',activation=tf.nn.relu)
pooling1 = tf.layers.max_pooling2d(conv1,(2,2),(2,2))

conv2 = tf.layers.conv2d(pooling1,16,(3,3),padding='same',activation=tf.nn.relu)
pooling2 = tf.layers.max_pooling2d(conv2,(2,2),(2,2))

conv3_1 = tf.layers.conv2d(pooling2,32,(3,3),padding='same',activation=tf.nn.relu)
conv3_2 = tf.layers.conv2d(conv3_1,32,(3,3),padding='same',activation=tf.nn.relu)
pooling3 = tf.layers.max_pooling2d(conv3_2,(2,2),(2,2))

conv4_1 = tf.layers.conv2d(pooling3,64,(3,3),padding='same',activation=tf.nn.relu)
conv4_2 = tf.layers.conv2d(conv4_1,64,(3,3),padding='same',activation=tf.nn.relu)
pooling4 = tf.layers.max_pooling2d(conv4_2,(2,2),(2,2))

flatten = tf.layers.flatten(pooling4)

fc7 = tf.layers.dense(flatten,64,activation=tf.nn.tanh)
fc8 = tf.layers.dense(fc7,64,activation=tf.nn.tanh)
a = tf.layers.dense(fc8,10)

cost = tf.losses.sparse_softmax_cross_entropy(y,a)

optimizer = tf.train.AdamOptimizer(0.001).minimize(cost)

pre = tf.argmax(a,1)
accuracy = tf.reduce_mean(tf.cast(tf.equal(pre,y),tf.float32))

sess = tf.Session()
sess.run(tf.global_variables_initializer())

batch_size = 20

for i in range(1,20001):
    batch_x,batch_y = train_data.next_batch(batch_size)

    c,a,_ = sess.run([cost,accuracy,optimizer],feed_dict={x:batch_x,y:batch_y})

    if i % 1000 == 0:
        print(i,c,a)

    if i % 5000 == 0:
        test_data = Cifar_Data(test_filenames, False)
        all_acc = []

        for k in range(1,201):
            batch_x1, batch_y1 = test_data.next_batch(batch_size)
            a1 = sess.run(accuracy, feed_dict={x: batch_x1, y: batch_y1})
            all_acc.append(a1)
        print(np.mean(all_acc))

效果

1000 1.386991 0.55
2000 0.9123479 0.6
3000 1.5659837 0.45
4000 1.2288189 0.6
5000 0.83473223 0.7
(10000, 3072)
(10000,)
0.61325
6000 1.0807028 0.55
7000 0.8725523 0.7
8000 1.0735404 0.65
9000 1.401082 0.6
10000 0.85721874 0.65
(10000, 3072)
(10000,)
0.66
11000 0.6657385 0.8
12000 0.78654975 0.7
13000 1.1124375 0.45
14000 1.0252459 0.65
15000 0.904095 0.65
(10000, 3072)
(10000,)
0.6795
16000 0.59674776 0.9
17000 0.560689 0.75
18000 0.56586057 0.85
19000 0.9847535 0.7
20000 0.44856086 0.9
(10000, 3072)
(10000,)
0.68574995



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 使用TensorFlow进行深度学习的CIFAR-10数据集的模型训练和识别可以遵循以下步骤: 1. 导入必要的库和CIFAR-10数据集:首先,需要导入TensorFlow和其他必要的库(例如numpy、matplotlib等),并下载CIFAR-10数据集。可以使用TensorFlow内置的数据集API或手动下载数据集。 2. 数据预处理:在将数据提供给模型之前,需要对数据进行预处理,例如将像素值归一化、对标签进行独热编码等。 3. 构建模型:可以使用TensorFlow的高级API(例如Keras)来构建深度学习模型。通常,使用卷积神经网络(CNN)来处理图像数据。可以根据任务的要求设计适当的网络结构。 4. 模型编译和训练:在将数据提供给模型之前,需要对数据进行预处理,例如将像素值归一化、对标签进行独热编码等。使用适当的优化器和损失函数来编译模型,并使用训练集训练模型。 5. 模型评估:在训练模型后,可以使用测试集对模型进行评估。可以计算准确率、损失函数值等指标。 6. 模型应用:在模型训练和评估后,可以使用模型进行预测。提供新的输入数据,模型将返回预测结果。 总之,使用TensorFlow进行CIFAR-10数据集的深度学习模型训练和识别需要对数据进行预处理、构建CNN模型、编译和训练模型、评估模型以及应用模型进行预测。 ### 回答2: 深度学习是一种以神经网络为基础的机器学习方法,而TensorFlow是一个由谷歌公司开发的支持深度学习的开源框架。在TensorFlow框架下,使用卷积神经网络(Convolutional Neural Network,CNN)对CIFAR-10数据集进行分类是一个非常经典的任务。 CIFAR-10数据集包含了10个不同的分类标签,包括飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船和卡车,每类数据有5000个训练样本和1000个测试样本。因此,模型的训练可以使用训练集进行,而测试过程则基于测试集进行。 在构建CNN模型时,可以使用序列化API(Sequential API)或函数式API(Functional API)进行设计和开发。对于序列化API,可以选择将不同的深度网络层(如卷积层、池化层、全连接层等)按照顺序叠加组合。而对于函数式API,则允许具有多个输入和输出的复杂模型。典型的CNN模型包括卷积层、池化层和全连接层。 在模型训练过程中,常用的优化器是随机梯度下降(Stochastic gradient descent,SGD)。还可以使用其他优化算法,如动量法(Momentum),Adagrad和Adam。同时,在训练过程中,需要考虑过拟合的问题,采取常用的对策如正则化、dropout等。 在模型训练完成后,测试模型将是一个核心的任务。可以通过计算模型的精确性(accuracy)和损失函数(loss)来验证模型的准确性。而常用的评估指标还包括ROC曲线、AUC值等。 总之,TensorFlow的深度学习在CIFAR-10数据集上的模型训练与识别任务是一个非常具有挑战性的任务。它需要深入理解神经网络的架构和特性,同时也需要熟悉常用的训练算法和评估指标。随着不断发展的人工智能技术和深度学习模型,TensorFlow在各个领域的应用前景非常广阔。 ### 回答3: TensorFlow是一个深度学习框架,广泛应用于研究和工业应用中。CIFAR10是一个广泛使用的图像分类数据集,由10个类别的60000张32x32像素图像组成。 TensorFlow提供了许多工具和API来训练和识别基于CIFAR10数据集的模型。 1. 准备数据 CIFAR10数据集可以从网上下载,通过使用Python编写脚本可以将其转换成可用于TensorFlow训练和识别的格式。例如,使用TensorFlow的数据输入库,可以将图像预处理,并将其转换为模型输入的batch格式。 2. 定义模型 可以使用TensorFlow构建各种类型的神经网络来训练CIFAR10数据集,如卷积神经网络(CNN)和循环神经网络(RNN)。TensorFlow提供的各种API可以方便地定义网络的结构和层,从而创建一个高效的图像分类器。 3. 训练模型 要训练模型,需要使用TensorFlow的优化器来计算和调整网络权重和偏置,以最小化损失函数。在训练期间,还需要定义一些指标来监控模型的性能和进度。可以使用TensorFlow提供的训练API,创建训练循环,并针对单个或多个GPU进行分布式训练。 4. 评估和测试模型 为确保神经网络在完全独立于训练数据的环境中运行良好,需要对其进行评估和测试。可以使用TensorFlow提供的API,对模型的准确性和性能进行评估。评估模型时,可以使用验证数据集,在训练过程中监控模型的泛化性能,避免过拟合。 5. 部署模型 一旦模型经过训练并通过评估,就可以使用TensorFlow的模型导出和转换工具,将其部署到生产环境中。TensorFlow支持将模型导出为TensorFlow Lite格式,以在移动设备上运行,并提供了Java,C++和Python等多种语言的API,便于将模型嵌入到应用程序中。 总之,TensorFlow提供了几种方法来训练和识别CIFAR10数据集上的模型。可以结合使用TensorFlow的API,优化器和分布式训练工具,以提高模型效率和性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值