资源简介

文件中原始代码利用CNN对CIFAR10数据集进行分类,准确度达到0.67,优化代码通过权重正则化、数据增强,增加全连接层等方式进行优化,准确度达到0.85。

资源截图

代码片段和文件信息

# -*- coding: utf-8 -*-
“““
Created on Tue Jan  8 14:04:20 2019

@author: shihui
“““

import tensorflow as tf
import numpy as np
import cifar10cifar10_input
import time

‘‘‘
初始化权重函数
‘‘‘
def variable_with_weight_loss(shapestdw1):
    var = tf.Variable(tf.truncated_normal(shapestddev=std)dtype=tf.float32)
    if w1 is not None:
        weight_loss = tf.multiply(tf.nn.l2_loss(var)w1name=“weight_loss“)
        tf.add_to_collection(“losses“weight_loss)
    return var

‘‘‘
损失函数
‘‘‘
def loss_func(logitslabels):
    labels = tf.cast(labelstf.int32)
    cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits
                           labels=labelsname=“cross_entropy_per_example“)
    cross_entropy_mean = tf.reduce_mean(tf.reduce_sum(cross_entropy))
    tf.add_to_collection(“losses“cross_entropy_mean)
    return tf.add_n(tf.get_collection(“losses“)name=“total_loss“)


if __name__ == “__main__“:
    #设置最大迭代次数
    max_steps = 10000
    #设置每次训练的数据大小
    batch_size = 128
    #下载解压数据
    cifar10.maybe_download_and_extract()
    # 设置数据的存放目录
    cifar10_dir = “C:/Users/29811/Desktop/cifar10/dataset/cifar-10-batches-bin“
    #获取数据增强后的训练集数据
    images_trainlabels_train = cifar10_input.distorted_inputs(cifar10_dirbatch_size)
    #获取裁剪后的测试数据
    images_testlabels_test = cifar10_input.inputs(eval_data=Truedata_dir=cifar10_dir
                                                   batch_size=batch_size)
    #定义模型的输入和输出数据
    image_holder = tf.placeholder(dtype=tf.float32shape=[batch_size24243])
    label_holder = tf.placeholder(dtype=tf.int32shape=[batch_size])

    #设计第一层卷积
    weight1 = variable_with_weight_loss(shape=[55364]std=5e-2w1=0)
    kernel1 = tf.nn.conv2d(image_holderweight1[1111]padding=“SAME“)
    bais1 = tf.Variable(tf.constant(0.0dtype=tf.float32shape=[64]))
    conv1 = tf.nn.relu(tf.nn.bias_add(kernel1bais1))
    pool1 = tf.nn.max_pool(conv1[1331][1221]padding=“SAME“)
    norm1 = tf.nn.lrn(pool14bias=1.0alpha=0.001 / 9beta=0.75)

    #设计第二层卷积
    weight2 = variable_with_weight_loss(shape=[556464]std=5e-2w1=0)
    kernel2 = tf.nn.conv2d(norm1weight2[1111]padding=“SAME“)
    bais2 = tf.Variable(tf.constant(0.1dtype=tf.float32shape=[64]))
    conv2 = tf.nn.relu(tf.nn.bias_add(kernel2bais2))
    norm2 = tf.nn.lrn(conv24bias=1.0alpha=0.01 / 9beta=0.75)
    pool2 = tf.nn.max_pool(norm2[1331][1221]padding=“SAME“)

    #第一层全连接层
    reshape = tf.reshape(pool2[batch_size-1])
    dim = reshape.get_shape()[1].value
    weight3 = variable_with_weight_loss([dim384]std=0.04w1=0.004)
    bais3 = tf.Variable(tf.constant(0.1shape=[384]dtype=tf.float32))
    local3 = tf.nn.relu(tf.matmul(reshapeweight3)+bais3)

    #第二层全连接层
    weight4 = variable_with_weight_loss([384192]std=0.04w1=0.004)
    bais4 = tf.Variable(tf.constant(0.1shape=[192]dtype=tf.float32))
    local4 = tf.nn.relu(tf.matm

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       5367  2020-05-14 18:03  优化后.py

     文件       5751  2020-05-14 19:18  原始.py

----------- ---------  ---------- -----  ----

                11118                    2


评论

共有 条评论