对一些重要的函数进行解释,加深自己的认识。
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取值的不同返回每行或者每列最大值的索引