tensorflow卷积神经网络详解-函数详解

对一些重要的函数进行解释,加深自己的认识。

1、reshape函数

下面举个例子来看看,以mnist数据集为例,下面首先是读入数据集

#读取mnist中的一个数据
from __future__ import division,print_function
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
#Import MNIST data
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/",one_hot = True)
def train_size(num):
    print('Total Training Image in Dataset = '+
    str(mnist.train.images.shape))
    print('-----------------------------------')
    x_train = mnist.train.images[:num,:]
    print('x_train Examples Loaded = ' + str(x_train.shape))
    y_train = mnist.train.labels[:num,:]
    print('y_train Examples Loaded = ' + str(y_train.shape))
    print('')
    return x_train,y_train
def test_size(num):
    print('Total Test Examples in Dataset = '+
    str(mnist.test.images.shape))
    print('-----------------------------------')
    x_test = mnist.test.images[:num,:]
    print('x_test Examples Loaded =' + str(x_test.shape))
    y_test = mnist.test.labels[:num,:]
    print('y_test Examples Loaded =' + str(y_test.shape))
    return x_test,y_test
def display_digit(images):
    plt.imshow(images,cmap = plt.get_cmap('gray_r'))
    plt.show()
x_train,y_train = train_size(55000)#抽取全部的训练集

其中x_train便是读入的训练集,通过以下命令查看x_train的形状

>>> x_train.shape
(55000, 784)

然后经过以下语句

x = tf.reshape(x, shape = [-1, 28, 28, 1])#重塑输入图片

可以看到,x的形状发生了变化

>>> x = tf.reshape(x_train, shape = [-1, 28, 28, 1])
>>> x.shape
TensorShape([Dimension(55000), Dimension(28), Dimension(28), Dimension(1)])
>>> 

 -1是指,不知道x_train的第一维是多少。

2、激活函数relu

import tensorflow as tf
import numpy as np
x_tensor = tf.constant([[1, 2, 3, 0, -1, -2]])
y = tf.nn.relu(x_tensor)
with tf.Session() as sess:
    print("tf.nn.relu(x_tensor) = " + str(sess.run(x_tensor)))
    print("tf.nn.relu(x_tensor) = " + str(sess.run(y)))

通过以上代码,可以清晰的认识到relu就是将大于0的数原封不动的输出,而将小于0的数变为0。

3、tf.matmul和tf.multiply的区别,tf.matmul是矩阵乘法,而tf.multiply是简单的对应点相乘。

import tensorflow as tf
a = tf.constant([1, 2, 3, 4, 5, 6], shape=[2, 3])
b = tf.constant([7, 8, 9, 10, 11, 12], shape=[3, 2])
c = tf.constant([1, 2, 3, 4, 5, 6])
d = tf.constant([7, 8, 9, 10, 11, 12])
a_matmul_b = tf.matmul(a,b)
c_multiply_d = tf.multiply(c,d)
with tf.Session() as sess:
    print("a_matmul_b = " + str(sess.run(a_matmul_b)))
    print("c_multiply_d = " + str(sess.run(c_multiply_d)))

4、卷积神经网络的权重weights和偏置biases

为了方便起见,编程的时候我们可以用Python中的字典Dictionary表示。

weights = {
    # 权重
    'wc1': tf.Variable(tf.random_normal([5, 5, 1, 32])),  # 5x5卷积层,1输入,32输出
    'wc2': tf.Variable(tf.random_normal([5, 5, 32, 64])),  # 5x5卷积层,32输入,64输出
    'wd1': tf.Variable(tf.random_normal([7 * 7 * 64, 1024])),  # 全连接,7x7x64输入,1024输出
    'out': tf.Variable(tf.random_normal([1024, n_classes]))  # 1024输入,10输出
}

biases = {
    # 偏置
    'bc1': tf.Variable(tf.random_normal([32])),  # 从正态分布中产生随机值
    'bc2': tf.Variable(tf.random_normal([64])),
    'bd1': tf.Variable(tf.random_normal([1024])),
    'out': tf.Variable(tf.random_normal([n_classes]))
}

下面举例说明对字典中的数据进行操作的方法

import tensorflow as tf
weights = {
    # 权重
    'wc1': tf.Variable(tf.random_normal([5, 5])),  # 5x5卷积层,1输入,32输出
    'wc2': tf.Variable(tf.random_normal([5, 5]))  # 5x5卷积层,32输入,64输出
}
biases = {
    # 偏置
    'bc1': tf.Variable(tf.random_normal([32])),  # 从正态分布中产生随机值
    'bc2': tf.Variable(tf.random_normal([64]))
}
x = 'wc1'
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(weights['wc1']))

5、tf.reduce_mean函数

用于求均值,先掌握最基本的用法,以后再摸索其他参数

import tensorflow as tf
x = tf.constant([[1., 2., 3.]])
y = tf.reduce_mean(x)
with tf.Session() as sess:
    print(sess.run(y))

输出结果

=============== RESTART: F:\tensorflow_code\tf.reduce_mean.py ===============
2.0

6、训练的一般过程

定义损失函数

选择优化器

启动计算图

7、 tf.global_variables_initializer()函数的作用

对于tensorflow的变量,即便我们对它进行初始化的赋值,但在sesssion中,还是无效色,例如以下代码:

import tensorflow as tf
a = tf.Variable(tf.constant("hell0 world!"))
init = tf.global_variables_initializer()
with tf.Session() as sess:
    #sess.run(init)  #initialization variables
    print(sess.run(a))

结果是一堆的报错。

取消掉注释

import tensorflow as tf
# 必须要使用global_variables_initializer的场合
# 含有tf.Variable的环境下,因为tf中建立的变量是没有初始化的,也就是在debug时还不是一个tensor量,而是一个Variable变量类型
a = tf.Variable(tf.constant("hell0 world!"))
init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)  #initialization variables
    print(sess.run(a))

这个时候便能看到正确的输出了。

8.tf.argmax(input,axis)根据axis取值的不同返回每行或者每列最大值的索引 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nwsuaf_huasir

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值