Tensorflow:实战Google深度学习框架(VGGNet16--实现mnist数据集分类)

本文介绍了使用TensorFlow框架,通过VGGNet16模型来实现MNIST手写数字数据集的分类。然而,在实践中遇到了问题,模型的精度表现较低。
摘要由CSDN通过智能技术生成

参考:tensorflow实战  黄文坚

# *_*coding:utf-8 *_*

from datetime import datetime
import math
import time
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets('MNIST_data', one_hot=True)

#卷积层函数
'''
kh、kw卷积核的高和宽,n_out卷积核数量即输出通道数,dh、dw步长的长和宽, p=参数列表
'''
def conv_op(input_op, name, kh, kw, n_out, dh, dw, p):
    #get_shape()[-1].value 获取输入input_op的通道数,比如224x224x3中最后那个3
    n_in = input_op.get_shape()[-1].value

    with tf.name_scope(name) as scope:
        '''tf.contrib.layers.xavier_initializer_conv2d根据某一层网络的输出输入节点数量自动调节最合适的分布'''
        kernel = tf.get_variable(scope + 'w', shape=[kh, kw, n_in, n_out], dtype=tf.float32,
                                 initializer=tf.contrib.layers.xavier_initializer_conv2d())
        conv = tf.nn.conv2d(input_op, kernel, (1, dh, dw, 1), padding='SAME')
        bias_init_val = tf.constant(0.0, shape=[n_out], dtype=tf.float32)
        biases = tf.Variable(bias_init_val, trainable=True, name='b')
        z = tf.nn.bias_add(conv, biases)
        activation = tf.nn.relu(z, name=scope)
        p += [kernel, biases]
        return activation

#全连接层函数
def fc_op(input_op, name, n_out, p):
    n_in = input_op.get_shape()[-1].value

    with tf.name_scope(name) as scope:
        kernal = tf.get_variable(scope + 'w', shape=[n_in, n_out], dtype=tf.float32,
                                 initializer=tf.contrib.layers.xavier_initializer())
        #这里biases不在初始化为0,而赋予一个较小的值0.1以避免dead neuron(神经死亡)
        biases = tf.Variable(tf.constant(0.1, shape=[n_out], dtype=tf.float32), name='b')
        activation = tf.nn.relu_layer(input_op, kernal, biases, name=scope)

        p += [kernal, biases]
        return activation

#创建最大池化层函数
def maxpool_op(input_op, name, kh, kw, dh, dw):
    return tf.nn.max_pool(input_op, ksize=[1, kh, kw, 1], strides=[1, dh, dw, 1], padding='SAME', name=name)

#前向传播函数
def inference_op(input_op, keep_prob):
    p = []

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值