tensorflow学习2-线性拟合和神经网路拟合
线性拟合的思路:
线性拟合代码:
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
#%%图形绘制
def data_show(x,y,w,b):
plt.figure()
plt.scatter(x,y,marker='.')
plt.scatter(x,(w*x+b),marker='.')
plt.show()
#%%生成数据
x_data=np.random.rand(100).astype(np.float32)
y_data=0.1*x_data + 0.3
#%%创建结构
Weights=tf.Variable(tf.random_uniform([1],-1.0,1.0))#平均分布的随机数
biases=tf.Variable(tf.zeros([1]))
y=Weights*x_data+biases
loss=tf.reduce_mean(tf.square(y-y_data)) #损失函数,reduce_mean:计算一个张量的各维度的元素的均值
optimizer=tf.train.GradientDescentOptimizer(0.5)#优化器 学习率选择#.GradientDescentOptimizer()实现梯度下降算法的优化器。
train=optimizer.minimize(loss)#优化器优化目标选择,使loss 最小
init=tf.global_variables_initializer() #初始化全变量节点
#%%
###训练部分
with tf.Session() as sess:
sess.run(init)
for i in range(200):
sess.run(train)
if i %20==0:
print(i,sess.run(Weights),sess.run(biases))
data_show(x_data,y_data,sess.run(Weights),sess.run(biases))
#%%
writer=tf.summary.FileWriter("/path/to/logs",tf.get_default_graph())
writer.close()
神经网络拟合二次函数(带噪声)
代码:
import tensorflow as tf
import numpy as np
#%%
def add_layer(input,in_size,out_size,activation_function=None):
Weights=tf.Variable(tf.random_normal([in_size,out_size]))
#tf.random.uniform()均匀分布,tf.random.normal() 正太分布
biases=tf.Variable(tf.zeros([1,out_size])+0.1)#biases 的维度是1行,Weights的列
#输入是1*input,Weights是input*output,output是1*output,所以biases是1*output
wx_plus_b=tf.matmul(input,Weights)+biases
if activation_function==None:
output=wx_plus_b
else:#加入激活函数
output= activation_function(wx_plus_b)
return output#返回output
#%%
x_data= np.linspace(-1,1,300)[:,np.newaxis] #np.linspace(),-1到1进行300等分的数组得到1*300,再进行变换为300*1
noise=np.random.normal(0,0.05,x_data.shape)
y_data=np.square(x_data)-0.5+noise
#%%
#占位符,feed_dict={}进行赋值
xs=tf.placeholder(tf.float32,[None,1])
ys=tf.placeholder(tf.float32,[None,1])
ll=add_layer(xs,1,10,activation_function=tf.nn.relu)#激活函数是relu
prediction=add_layer(ll,10,1,activation_function=None)
reduce_sum=tf.reduce_sum(tf.square(ys-prediction),reduction_indices=1)
loss=tf.reduce_mean(reduce_sum)
#tf.reduce_sum:计算一个张量的各个维度的元素之和。
#tf.reduce_mean():取平均值。
train_step=tf.train.GradientDescentOptimizer(0.1).minimize(loss)
init=tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
for i in range(1000):
sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
#if i % 50 ==0:
# print(sess.run(loss,feed_dict={xs:x_data,ys:y_data}))
if i==999:
print(sess.run(tf.square(ys - prediction),feed_dict={xs:x_data,ys:y_data}))
#输出的是300行1列 [300,1]
#[[ 4.99251783e-02]
#[ 1.65489316e-02]
# ..........
#[ 3.05732153e-02]]
#经过,tf.reduce_sum(,reduction_indices=1)后为了:
if i==999:
print(sess.run(tf.reduce_sum(tf.square(ys-prediction),reduction_indices=1), feed_dict={xs: x_data, ys: y_data}))
#输出的是1行300列[300]------>[1,2,3,.....]就叫做[300],共计300个元素
#[ 3.73238046e-03 ..... 1.45917088e-02]
补充知识 :
1.tf.random.uniform() 符合均匀分布--------tf.random.normal() 符合正太分布
2.np.newaxis补充知识 :
import numpy as np
a=np.array([1,2,3,4,5])#creat a array
b=a[:,np.newaxis]
#a---->[1,2,3,4,5]
#b---->[[1],[2],[3],[4],[5]] 5行1列 (5,1)
c=a[np.newaxis,:]
#c---->[[1,2,3,4,5]] 1行5列 (1,5)
3.特别注意:reduction_indices=[1]可知是指定操作坐标轴的函数,即把[300,1]按行求和后拼接为新的数组,也就是[300]的尺寸
tensorflow学习2-线性拟合和神经网路拟合的更多相关文章
- tensorflow学习之路-----简单卷积神经网路
import tensorflow as tf#取数据,目的是辨别数字from tensorflow.examples.tutorials.mnist import input_data'''手动添加 ...
- Tensorflow学习:(三)神经网络优化
一.完善常用概念和细节 1.神经元模型: 之前的神经元结构都采用线上的权重w直接乘以输入数据x,用数学表达式即,但这样的结构不够完善. 完善的结构需要加上偏置,并加上激励函数.用数学公式表示为:.其中 ...
- Tensorflow学习教程------过拟合
Tensorflow学习教程------过拟合 回归:过拟合情况 / 分类过拟合 防止过拟合的方法有三种: 1 增加数据集 2 添加正则项 3 Dropout,意思就是训练的时候隐层神经元每次随机 ...
- tensorflow学习笔记——自编码器及多层感知器
1,自编码器简介 传统机器学习任务很大程度上依赖于好的特征工程,比如对数值型,日期时间型,种类型等特征的提取.特征工程往往是非常耗时耗力的,在图像,语音和视频中提取到有效的特征就更难了,工程师必须在这 ...
- tensorflow学习笔记——使用TensorFlow操作MNIST数据(1)
续集请点击我:tensorflow学习笔记——使用TensorFlow操作MNIST数据(2) 本节开始学习使用tensorflow教程,当然从最简单的MNIST开始.这怎么说呢,就好比编程入门有He ...
- TensorFlow 学习(6)———TensorFlow运作方式
本部分主要涉及到TensorFlow的运作方式和主要操作 所需的代码在https://github.com/tensorflow/tensorflow/tree/master/tensorflow/e ...
- Tensorflow学习笔记No.4.1
使用CNN卷积神经网络(1) 简单介绍CNN卷积神经网络的概念和原理. 已经了解的小伙伴可以跳转到Tensorflow学习笔记No.4.2学习如和用Tensorflow实现简单的卷积神经网络. 1.C ...
- 深度学习-tensorflow学习笔记(2)-MNIST手写字体识别
深度学习-tensorflow学习笔记(2)-MNIST手写字体识别超级详细版 这是tf入门的第一个例子.minst应该是内置的数据集. 前置知识在学习笔记(1)里面讲过了 这里直接上代码 # -*- ...
- tensorflow学习笔记——使用TensorFlow操作MNIST数据(2)
tensorflow学习笔记——使用TensorFlow操作MNIST数据(1) 一:神经网络知识点整理 1.1,多层:使用多层权重,例如多层全连接方式 以下定义了三个隐藏层的全连接方式的神经网络样例 ...
随机推荐
- Java基础知识(JAVA基本数据类型包装类)
基本数据类型的包装类 为什么需要包装类? Java并不是纯面向对象的语言.Java语言是一个面向对象的语言,但是Java的基本数据类型却不是面向对象的.但是我们在实际使用中经常需要将基本数据转化成对象 ...
- 爬虫mm131明星照片
''' 1. 爬取以下站点中各个明星图片,分别单独建文件夹存放. 起始URL地址:http://www.mm131.com/mingxing ''' import os import logging ...
- windows xp 不支持Wap2加密方式
故障:错误提示“Windows无法连接到选定网络,网络可能不在区域中.请刷新可用网络的列表,重新尝试.” 原因:windows xp并不直接支持Wap2加密方式的~估计是windows xp比较老了吧 ...
- CentOS7下Docker的安装与使用
前言 简介 Docker 是一个开源的应用容器引擎,基于 Go 语言,并遵从 Apache2.0 协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到 ...
- C 表達式及返回值
以下程序的输出结果是__A____. #include<stdio.h> main() { ,j=; printf("%d,%d\n",++i,j--); } A., ...
- PHP 判断括号是否闭合
一开始的思路就是判断每种括号的开闭数量是否相等,其实虽然也能实现但是搞得太复杂了: 后来查了查,只需设一个常量,左括号 +1,右括号 -1,闭合的话为0,没闭合的话不为0, 出现<0即为顺 ...
- 基于Apache Spark机器学习的客户流失预测
流失预测是个重要的业务,通过预测哪些客户可能取消对服务的订阅来最大限度地减少客户流失.虽然最初在电信行业使用,但它已经成为银行,互联网服务提供商,保险公司和其他垂直行业的通用业务. 预测过程是大规模数 ...
- VS中去掉空格虚点
Ctrl + R+W 可以在VS中添加或移除 空格虚点.
- 解决PuTTY中文乱码
转载:http://lhdeyx.blog.163.com/blog/static/3181969720091115113716947/ 打开putty,选择 Category中的Windows--- ...
- CentOS6.5安装Elasticsearch5.3.0
1. 首页到官方网站下载最新安装包 https://www.elastic.co/downloads/elasticsearch elasticsearch-5.3.0.tar.gz 2. 将软件包上 ...