TensorFlow运行方式。加载数据、定义超参数,构建网络,训练模型,评估模型、预测。

构造一个满足一元二次函数y=ax^2+b原始数据,构建最简单神经网络,包含输入层、隐藏层、输出层。TensorFlow学习隐藏层、输出层weights、biases。观察训练次数增加,损失值变化。

生成、加载数据。方程y=x^2-0.5。构造满足方程的x、y。加入不满足方程噪声点。

import tensor flow as tf
import bumpy as np
# 构造满中一元二次方程的函数
x_data = np.linspace(-1,1,300)[:,np.newaxis] # 构建起300个点,分布在-1到1区间,用np生成等差数列,300个点的一维数组转换为300x1的二维数组
noise = np.random.normal(0, 0.05, x_data.shape) # 加入噪声点,与x_data维度一致,拟合均值0、方差0.05正态分布
y_data = np.square(x_data) - 0.5 + noise # y = x^2 - 0.5 + 噪声

定义x、y占位符作输入神经网络变量。

xs = tf.placeholder(tf.float32, [None, 1])
ys = tf.placeholder(tf.float32, [None, 1])

构建网络模型。

构建一个隐藏层,一个输出层。输入参数4个变量,输入数据、输入数据维度、输出数据维度、激活函数。每层向量化处理(y = weights*x +biases),激活函数非线性化处理,输出数据。定义隐藏层、输出层:

def add_layer(inputs, in_size, out_size, activation_function=None):
# 构建权重:in_size*out_size 大小的矩阵
weights = tf.Variable(tf.random_normal([in_size, out_size]))
# 构建偏置:1 * out_size矩阵
biases = tf.Variable(tf.zeros([1, out_size]) + 0.1)
# 矩阵相乘
Wx_plus_b = tf.matmul(inputs, weights) + biases
if activation_function is None:
outputs = Wx_plus_b
else:
outputs = activation_function(Wx_plus_b)
return outputs #得到输出数据
# 构建隐藏层,假设隐藏层有10个神经元
h1 = add_layer(xs, 1, 20, activation_function=tf.nn.relu)
# 构建输出层,假设输出层和输入层一样,有1个神经元
prediction = add_layer(h1, 20, 1, activation_function=None)

构建损失函数,计算输出层预测值、真实值间误差。二者差的平方求和再取平均。梯度下降法,以0.1效率最小化损失。

loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction), reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

训练模型。训练1000次,每50次输出训练损失值。

init = tf.global_variables_initializer() # 初始化所有变量
sess = tf.Session()
sess.run(init)

for i in range(1000): # 训练1000次
sess.run(train_step, feed_dict = (xs: x_data, ys: y_data)
if i % 50 == 0: #每50次打印出一次损失值
print(sets.run(loss, feed_dict={xs: x_data, ys: y_data}))

训练权重值,模型拟合y = x^2-0.5的系数1和-0.5。损失值越来越小,训练参数越来越逼近目标结果。评估模型,学习系数weights、biase前向传播后和真值y = x^2-0.5结果系数比较,根据相近程度计算准确率。

超参数设定。hyper-parameters,机器学习模型框架参数。手动设定、不断试错。

学习率(learning rate),设置越大,训练时间越短,速度越快。设置越小,训练准确度越高。可变学习率,训练过程记录最桂准确率,连续n轮(epoch)没达到最佳准确率,认为准确率不再提高,停止训练,early stopping,no_improvement-in-n规则。学习率减半,再满足时再减半。逐渐接近最优解,学习率越小,准确度越高。

mini-batch大小。每批大小决定权重更新规则。整批样本梯度全部计算完,才求平均值,更新权重。批次越大训练速度越快,利用矩阵、线性代数库加速,权重更新频率低。批次越小,训练速度越慢。结合机器硬件性能与数据集大小设定。

正则项系数(regularization parameter,λ)。凭经验。复杂网络出现明显过拟合(训练数据准确率高,测试数据准确率下降)。一开始设0,确定好学习率,再给λ设值,根据准确率精细调整。

参考资料:
《TensorFlow技术解析与实战》

欢迎推荐上海机器学习工作机会,我的微信:qingxingfengzi

学习笔记TF055:TensorFlow神经网络简单实现一元二次函数的更多相关文章

  1. tensorflow学习笔记——使用TensorFlow操作MNIST数据(2)

    tensorflow学习笔记——使用TensorFlow操作MNIST数据(1) 一:神经网络知识点整理 1.1,多层:使用多层权重,例如多层全连接方式 以下定义了三个隐藏层的全连接方式的神经网络样例 ...

  2. tensorflow学习笔记——使用TensorFlow操作MNIST数据(1)

    续集请点击我:tensorflow学习笔记——使用TensorFlow操作MNIST数据(2) 本节开始学习使用tensorflow教程,当然从最简单的MNIST开始.这怎么说呢,就好比编程入门有He ...

  3. [转载]SharePoint 2013搜索学习笔记之搜索构架简单概述

    Sharepoint搜索引擎主要由6种组件构成,他们分别是爬网组件,内容处理组件,分析处理组件,索引组件,查询处理组件,搜索管理组件.可以将这6种组件分别部署到Sharepoint场内的多个服务器上, ...

  4. OGG学习笔记03-单向复制简单故障处理

    OGG学习笔记03-单向复制简单故障处理 环境:参考:OGG学习笔记02-单向复制配置实例 实验目的:了解OGG简单故障的基本处理思路. 1. 故障现象 故障现象:启动OGG源端的extract进程, ...

  5. QML学习笔记(六)- 简单计时器和定时器

    做一个简单的qml计时器和定时器,左键触发计时,右键触发定时 GitHub:八至 作者:狐狸家的鱼 本文链接:QML学习笔记(六)- 简单计时器和定时器 左键点击按钮,触发计时器,中键可以暂停计时,同 ...

  6. CNN学习笔记:卷积神经网络

    CNN学习笔记:卷积神经网络 卷积神经网络 基本结构 卷积神经网络是一种层次模型,其输入是原始数据,如RGB图像.音频等.卷积神经网络通过卷积(convolution)操作.汇合(pooling)操作 ...

  7. [DL学习笔记]从人工神经网络到卷积神经网络_3_使用tensorflow搭建CNN来分类not_MNIST数据(有一些问题)

    3:用tensorflow搭个神经网络出来 为什么用tensorflow呢,应为谷歌是亲爹啊,虽然有些人说caffe更适合图像啊mxnet效率更高等等,但爸爸就是爸爸,Android都能那么火,一个道 ...

  8. [DL学习笔记]从人工神经网络到卷积神经网络_1_神经网络和BP算法

    前言:这只是我的一个学习笔记,里边肯定有不少错误,还希望有大神能帮帮找找,由于是从小白的视角来看问题的,所以对于初学者或多或少会有点帮助吧. 1:人工全连接神经网络和BP算法 <1>:人工 ...

  9. 学习笔记TF024:TensorFlow实现Softmax Regression(回归)识别手写数字

    TensorFlow实现Softmax Regression(回归)识别手写数字.MNIST(Mixed National Institute of Standards and Technology ...

随机推荐

  1. rnn应用

    Weather Recognition plays an important role in our daily lives and many computer vision applications ...

  2. egret贝塞尔曲线运动

    class MtwGame { public constructor() { } private static _instance: MtwGame; public static get Instan ...

  3. Selenium 工作原理

    Selenium是ThoughtWorks公司研发的一个强大的基于浏览器的开源自动化测试工具,它通常用来编写web应用的自动化测试.早期也即Selenium1.x时期主要使用Selenium RC(S ...

  4. day13笔记

    1:StringBuffer(掌握) (1)用字符串做拼接,比较耗时并且也耗内存,而这种拼接操作又是比较常见的,为了解决这个问题,Java就提供了 一个字符串缓冲区类.StringBuffer供我们使 ...

  5. lsof 命令用法详解

    lsof 命令用法详解 作用 用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP.UDP).找回/恢复删除的文件.是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所 ...

  6. css flex布局,小程序flex布局,垂直居中完美解决

    flex弹性布局,很好的解决了垂直居中的问题,上代码: wxml: <view class='container'> <view class='item item1'>item ...

  7. L1-037 A除以B (10 分)

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805094485180416   真的是简单题哈 —— 给定两个 ...

  8. MySQL简单的查询语句

    1.查询特定列:select 列名 from 表名:(必须先进入数据库)或者 select 列名 from 数据库.表名: 2.查询多个列:select 列1,列2,... from 表名: 3.除去 ...

  9. 初读"Thinking in Java"读书笔记之第六章 --- 访问权限控制

    包:库单元 包内包含有一组类,他们在单一的名字空间下被组织在一起. 通过import ***.***.*可以将某个包下的所有类导入到当前文件中. 每个Java源文件最多只能有一个public类,且名称 ...

  10. Vue源码之 diff Vnode

    其实现在这个还没看懂,只能是初步看一下 _update调用__patch__方法,如果prevVnode(也就是oldVnode),旧vnode和新vnode对比,如果没有,就vnode就是vm.$e ...