Python与机器学习--TensorFlow与神经网络

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

dtype=tf.float32)
# 添加一个占位符,用输出(即花瓣宽度) y_target = tf.placeholder(shape=[None, 1], dtype=tf.float32)
# 单个隐藏层:五个节点(这里我们设计了五个节点)
hidden_layer_nodes = 5
weights = tf.Variable(tf.random_normal(shape=[3, hidden_layer_nodes]))
# 添加占位符,四个输入
Car 情报局
x_data = tf.placeholder(shape=[None, 4], dtype=tf.float32) # 添加占位符,一个输出 y_target = tf.placeholder(shape=[None, 1], dtype=tf.float32)
应用二:设计多层神经网络实现鸢尾花分类
• 定义添加单个隐藏层
Car 情报局
# 定义如何添加一个隐藏层的函数 def add_layer(input_layer, input_num, output_num):
weights = tf.Variable(tf.random_normal(shape=[input_num, output_num])) biase = tf.Variable(tf.random_normal(shape=[output_num])) hidden_output = tf.nn.relu(tf.add(tf.matmul(input_layer, weights), biase)) return hidden_output
一、Tensorflow
Car 情报局
• 基Te本ns使or是用TensorFlow中的核心单元, TensorFlow 程序使用 tensor 数据
结构来代表所有的数据, 计算图中, 操作间传递的数据都是 tensor. 你可以 把 TensorFlow tensor 看作是一个 n 维的数组或列表,如同矩阵一样
应用一:设计单层神经网络预测花瓣宽度
• 训练与评估
# 初始化
init = tf.global_variables_initializer() # 进行 #se遍ss.历run迭(i代nit训) 练模型 for i in range(2000):
# 训练 sess.run(train_step, feed_dict={x_data:x_train, y_target:y_train}) # 训练数据评估模型 temp_loss = sess.run(loss, feed_dict = {x_data:x_train, y_target:y_train}) loss_vec.append(np.sqrt(temp_loss)) # 测试数据评估模型 test_temp_loss = sess.run(loss, feed_dict = {x_data:x_test, y_target:y_test})
# 定义损失函数,使得误差最小 loss = tf.reduce_mean(tf.square(y_target - final_output)) # 设置学习率来调整每一步更新的大小 my_opt = tf.train.GradientDescentOptimizer(learning_rate=0.00004) # 优化目标:最小化损失函数
Tensor("Const:0", shape=(), dtype=float32) Tensor("Const_1:0", shape=(2,), dtype=float32) Tensor("node3:0", shape=(3, 2), dtype=int32)
一、Tensorflow
• 基本使用
Tensor("x_const:0", shape=(3,), dtype=float32) <tf.Variable 'y_var:0' shape=(3,) dtype=float32_ref> Tensor("add_op:0", shape=(3,), dtype=float32)
一、Tensorflow
• 概念
TensorFlow™ 是一个采用计算图的形式表述数值计算的编程 系统,本身是一个开源软件库。TensorFlow计算图中每一个 节点表示一次数学计算,每一条边表示计算之间的依赖关系。
张量(tensor)是计算图的基本数据结构,可以理解为多维 数据,流(Flow)表达了张量之间通过计算互相转化的过程。
… 迭代次数:2000。 损失: 0.15921749 花瓣宽度的预期差值(百分比):PetalWidthCm
31.36
Car 情报局
上机时间:20min
Car 情报局
• 设计神经网络 • 编码实现 • 模型训练 • 模型评估 • 实验报告步骤1
应用二:设计多层神经网络实现鸢尾花分类
• 定义输入输出
Car 情报局
一、Tensorflow
• 基本使用
使用 tensor 表示数据 通过变量 (Variable) 输入训练数据,维护状态 使用计算图 (computational graph) 来表示计算任务 在会话 (Session) 的上下文 (context) 中执行计算图
Car 情报局
# 输出预测精确度
y_pred = sess.run(final_output,feed_dict={x_data:x_test}) print("花瓣宽度预期差值(百分比):{}%".format(np.mean(abs(y_testy_pred)*100/y_test)))
迭代次数:50。 损失: 1.0477574 迭代次数:100。 损失: 0.77502954 迭代次数:150。 损失: 0.5409347
它灵活的架构可以在多种平台上展开计算,例如台式计算机 中的一个或多个CPU(或GPU),服务器,移动设备等等。
TensorFlow 最初由Google大脑小组(隶属于Google机器智 能研究机构)的研究员和工程师们开发出来,用于机器学习 和深度神经网络方面的研究,但这个系统的通用性使其也可 广泛用于其他计算领域。
test_loss.append(np.sqrt(test_temp_loss))
Car 情报局
应用一:设计单层神经网络预测花瓣宽度
• 训练与评估
# 输出损失
if (i+1)%500 == 0: print('迭代次数:' + str(i+1) + '。 损失: ' + str(temp_loss))
• 基本使用
计算图是用图中节点呈现一系列操作的图表。包括:
1. 构建计算图 # -*2-.cod运in行g:计u算tf图-8 -*-
ii构mnpp建uot的r1t=t计etnf算s.coo图rnflso必twan须at(s在[1tf.t0e, n2.s0o, r3f.0lo],wn的amsee=ss“ioxn_c中on才st”能)运#常行量:
导入tensorflow
import tensorflow as tf
使用Tensor
node1 = tf.constant(3.0, tf.float32) node2 = tf.constant([1.0, 2.0]) # also tf.float32 implicitly node3 = tf.constant( [[1, 2], [3, 4], [5, 6]], name="node3") print node1, '\n' ,node2, '\n',node3
应用一:设计单层神经网络预测花瓣宽度
Car 情报局
பைடு நூலகம்
• 结果层
# 结果层 weights = tf.Variable(tf.random_normal(shape=[hidden_layer_nodes, 1])) biase = tf.Variable(tf.random_normal(shape=[1])) # 激励函数使用的是ReLu,它可快速收敛,但容易出现极值 final_output = tf.nn.relu(tf.add(tf.matmul(hidden_output, weights),biase)) # 定义损失函数,采用模型输出和预期值差值的L1范数平均 loss = tf.reduce_mean(tf.abs(y_target - final_output)) # 标准梯度下降优化算法,使用梯度下降优化器来基于损失值的导数去更新权重。 # 优化器采用一个学习率来调整每一步更新的大小,注意学习率的调参 my_opt = tf.train.GradientDescentOptimizer(learning_rate=0.001) # 最小化损失函数 train_step = my_opt.minimize(loss)
TENSORFLOW与神经网络
主要教学内容
TensorFlow的使用 单层神经网络 多层神经网络
项目:鸢尾花分类 数据读取 设计神经网络模型 设计单层神经网络预测花瓣宽度 设计多层神经网络实现鸢尾花分类 编码实现神经网络 训练神经网络 模型评估与应用
Car 情报局
一、Tensorflow
Car 情报局
计算图是用图中节点呈现一系列操作的图表。包括:
1. 构建计算图
2. 运行计算图
构建简单的计算图,每个节点将零个或多个tensor作为输入,产生一个tensor作 为输出。一个典型的节点为常量,他将被tensorflow内部存储起来:
import tensorflow as tf input1 = tf.constant([1.0, 2.0, 3.0], name = "x_const") input2 = tf.Variable([3.0, 4.0, 5.0], name = "y_var") output = tf.add(input1, input2, name ="add_op") print input1, '\n',input2, '\n',output
biase = tf.Variable(tf.random_normal(shape=[hidden_layer_nodes])) # 隐藏层输出,即输出层的输入 # 激励函数: hidden_output = tf.nn.relu(tf.add(tf.matmul(x_data,weights),biase))
result: [ 7. 8. 9.] ,type: <type 'numpy.ndarray'>
Car 情报局
项目应用:鸢尾花数据集
Car 情报局
应用一:设计单层神经网络预测花瓣宽度
Car 情报局
• 结构
# 添加三个占位符,用做输入(即花萼长 度、花萼宽度和花瓣长度)
x_data = tf.placeholder(shape=[None, 3],
循环添加结点数为[10,8,10]的三个隐藏层
应用二:设计多层神经网络实现鸢尾花分类
• 添加多个隐藏层
# 定义三个隐藏层对应的结点个数 hidden_layer_nodes = [10,8,10]
Car 情报局
hidden_output = add_layer(x_data, 4, hidden_layer_nodes[0]) # 循环添加三个隐藏层 for i in range(len(hidden_layer_nodes[:-1])):
input2 = tf.Variable([3.0, 4.0, 5.0], name = “y_var") #变量必须有初值 output = tf.add(input1, input2, name ="add_op")
sess = tf.Session() # 运行计算图之前创建session # 调用 sess 的 ‘run()' 方法来执行矩阵乘法 op,feed 用来传入变量数据 result = sess.run(output, feed_dict={input2 : [6.0, 6.0, 6.0]}) # 返回值 'result' 是一个 numpy `ndarray` 对象. print "result: ",result, ",type: ",type(result) # 任务完成, 关闭会话. sess.close()
相关文档
最新文档