TensorFlow深度学习框架

开发环境准备

  • 安装python 傻瓜式安装(记得勾选上pip)

    cmd输入python 出现版本号 并且可以出现>>> 即时交互式命令行界面 就代表安装成功

  • 检查pip安装 pip --version

  • 安装Tensorflowpip install tensorflow

    cmd输入python打开命令行窗口

    1
    2
    import tensorflow
    print(tensorflow.__version__)

    输出版本号 即安装成功

1.张量

1
2
3
4
5
6
7
n1 = x1 * w1
print("n1: %s" % n1)
# n1: Tensor("mul:0", dtype=float32)

y = n1 + n2 + n3
print("y: %s" % y)
# y: Tensor("add_1:0", dtype=float32)

类似如上的一个张量的输出信息中,括号中的一个部分就是它对应的操作,第二部分就是它的输出数据类型。

如果张量是由多个操作计算而来,输出信息中的操作将是其中的最后一个。

张量(tensor)就是神经网络中神经元节点接收输入数据后经过一定计算操作输出的结果对象;张量在神经网络模型图中表现为各层的节点的输出数据。节点加上连线所组成的整个神经网络模型图表现的是张量在神经网络中“流动(flow)的过程”,这就是TensorFlow的由来。

张量在程序中的具体表现是一个Tensor类型对象。

2.形态

张量用来存放节点的输出数据的。TensorFlow中用形态(shape)来表达在张量中存储的数据形式。

如果数据是2x3的矩阵,那么它的形态就是[2,3]

如果数据是[90,80,70],那么它的形态就是[3]

如果数据是[[[90,80,70], [98,95,87]], [[99, 88, 77], [88, 90, 63]]],那么它的形态就是[2,2,3]

3.阶

张量的形态用一个数组来表示,这个数组中有几个数字,我们就说这个张量是几阶的张量。

标量是0阶,向量是1阶….

4.常用函数

(1)softmax函数

softmax函数可以把一个向量规范化后得到一个新的向量,这个新向量中的所有数值相加起来保证为1

1
2
w = tf.Variable(tf.zeros([3]), dtype=tf.float32)
wn = tf.nn.softmax(w)
(2)激活函数sigmoid

sigmoid函数可以把任何数字变成一个0到1范围之间的数字

也是tf.nn.sigmoid()

(3)激活函数tanh

类似sigmoid函数,用来去线性化。区别是tanh函数会把任何一个数字转换为[-1,1]

(3)full填充函数

生成一个多维数组,并用预定的值来进行填充

1
2
xData = np.full(shape=(rowCount, 3), fill_value=0, dtype=np.float32)
yTrainData = np.full(shape=(rowCount, 3), fill_value=0, dtype=np.float32)

来自于numpy.full()

(4)random随机数

用来生成随机数,调用random.random()之前 ,写上random.seed()

随机数范围为[0,1) 稍微会点编程都知道的尝识

1
2
3
4
import random
# 产生随机数种子
random.seed()
xData = [int(random.random() * 41 + 60), int(random.random() * 41 + 60), int(random.random() * 41 + 60)]
(5)loadtxt函数

用来载入文本文件数据,第一个参数代表文件名,命名参数delimiter表示数据项之间用什么字符分隔,命名参数dtype表示读取数据的类型

1
2
3
import numpy as np
wholeData = np.loadtxt("data.txt", delimiter=",", dtype=np.float32)
print(wholeData)
(5)pandas函数

numpy的loadtxt函数对中文的支持不好,需要用第三方包pandas来进行比较复杂的处理

使用之前需要先安装pip install pandas

1
2
3
4
5
6
import numpy as np
import pandas as pd

fileData = pd.read_csv('data.csv', dtype=np.float32, header=None, usecols=(1, 2, 3, 4))
wholeData = fileData.values.tolist() # 将csv文件转为二维数组
print(wholeData)
  • 将非数字转化为数字,比如 将”是”转为1 “否”转为2

    fileData = pd.read_csv('data.csv', dtype=np.float32, header=None, converters={(3): lambda s: 1.0 if s == "是" else 0.0})

  • 非数字列的舍弃

    fileData = pd.read_csv('data.csv', dtype=np.float32, header=None, usecols=(1, 2, 3, 4))

常见的优化神经网络结构的方法:

  • 增加神经元节点的数量

    我们要注意,由于神经网络调节可变参数的初值一般是随机数,另外优化器对可变参数的调节也有一定随机性,所以每次程序执行训练后的结果有所不同是正常的,但大体趋势应该近似。也不排除优化器落入“陷阱”,导致误差始终无法收敛的情况,这时候重新进行训练,从另一组可变参数随机初始值开始即可。

  • 增加隐藏层的数量

    增加层数的效果会好一点。但是每一层上的激活函数选择上要动一些脑筋,有些层之间激活函数的组合会遇到意料不到的问题。层数太多还会导致优化器感知不畅而无法调节可变参数

最常见的隐藏层形式就是全连接层,各个节点与上一层中的各个节点间都有连线

对于全连接层,如果希望有n个输出(也就是说希望有n个神经元节点来处理输入数据),那么需要本层的可变参数w是一个形态为[m,n]的矩阵,其中m是上一层输出矩阵的列数(也就是第二个维度的数字)。如果上一层输出矩阵的行数是r,那么全连接层的输出矩阵的形态将是[r,n]