目录

  • 1-随机数生成
  • 2-三层网络拟合一个y = sinx
  • 3-三层网络拟合多个函数(y = sinx,y =cosx,y = x**2)
  • 训练注意事项
    • 步长设置代码样例
    • 样本设置、标签设置
    • 中间层设置方式

1-随机数生成

np.random.normal()#正态分布随机数,也叫高斯分布,密度函数是几字形
np.random.uniform()#均匀分布随机数,密度函数是近似一条直线
np.random.randint()#随机取出整数

2-三层网络拟合一个y = sinx

题目:用tensorflow框架,按照下面的网络模型搭建三层神经网络(输入层,中间层,输出层),训练sinx函数模型,并用它来测试

#用三层神经网络模拟
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
import mathMid_Num = 120#隐层神经元个数def get_Tensor():x = tf.placeholder(tf.float32,[None],"x")#训练数据,传入训练数据z = tf.placeholder(tf.float32,[None],"z")#标签,训练的时候需要传入lr = tf.placeholder(tf.float32,[],"lr")#步长,步长不传入形状#搭建网络,注意不能用name初始化的变量名,否则会有异常t = tf.expand_dims(x,1)#转换成N行1列w1 = tf.get_variable("w1",[1,Mid_Num],tf.float32)#第二层,使用前需要初始化所有变量b1 = tf.get_variable("b1",[Mid_Num],tf.float32)t = tf.matmul(t,w1)t = t +b1t = tf.nn.relu(t)w2 = tf.get_variable("w2",[Mid_Num,1],tf.float32)# b2 = tf.get_variable("b2",[1],tf.float32)predict = tf.matmul(t,w2)predict = tf.reshape(predict,[-1])#预测结果出来了,可以构建损失函数了loss = tf.square(z - predict)loss = tf.reduce_mean(loss)#带入lr,构建损失函数opt = tf.train.AdadeltaOptimizer(lr)train_opt = opt.minimize(loss)return x,z,lr,predict,train_optdef train(tensors,simple,session,epoch,lr_s):x,z,lr,_,train_opt = tensorsxs,zs = simpleprint("Start train...")for _ in range(epoch):session.run(train_opt,{x:xs,z:zs,lr:lr_s})print("Finish train!")def predicte(tensors,session,Test_x):x,_,_,predict,_ = tensorsreturn session.run(predict,{x:Test_x})def main():xs=np.arange(0,2*math.pi,0.001)#样本zs=np.sin(xs)#标签plt.plot(xs,zs)#样本画图config = tf.ConfigProto()config.gpu_options.allow_growth = Truewith tf.Session(config=config) as session:tensors = get_Tensor()#搭建网络session.run(tf.global_variables_initializer())train(tensors,(xs,zs),session,epoch= 500000,lr_s=0.001)#训练网络Test_x = np.random.uniform(0,2*math.pi,[500])Test_x = np.sort(Test_x)Test_y = predicte(tensors,session,Test_x)plt.plot(Test_x,Test_y)plt.show()

拟合出来的橙色线:

3-三层网络拟合多个函数(y = sinx,y =cosx,y = x**2)

思路:如果需要拟合多个函数模型,只需要更改获取网络搭建时候标签的长度
不一样的设置代码


#1、输入样本结构
ys = [np.sin(xs),np.cos(xs),np.sqrt(xs)]  # [629]
ys = np.transpose(ys)  #[None,2]#2、网络结构更改
z = tf.placeholder(tf.float32,[None,3],"z")#输入3个的时候
w2 = tf.get_variable("w2", [mid_units,3], tf.float32)
b2 = tf.get_variable("b2",[3],tf.float32)

更新后的代码


import numpy as np
from matplotlib import pyplot as plt
import math
import tensorflow as tfmid_units = 500
num_samples = 500#样本数量
def get_tensors(lr = 0.01):x = tf.placeholder(tf.float32,[None],"x")##除了placeholder长度不确定用None,其他地方用-1表示z = tf.placeholder(tf.float32,[None,3],"z")#输入2个的时候t = tf.expand_dims(x,1)#把x的维度变为1维w1 = tf.get_variable("w1",[1,mid_units],tf.float32)t = tf.matmul(t,w1)#[None,mid_units]矩阵乘法b1 = tf.get_variable("b1",[mid_units],tf.float32)#偏置t += b1 #[None,mid_units]矩阵和向量可以相加,broadcasting,可广播性质,只要后面的是一致的则可以广播t = tf.nn.relu(t)w2 = tf.get_variable("w2", [mid_units,3], tf.float32)b2 = tf.get_variable("b2",[3],tf.float32)predict = tf.matmul(t,w2)+b2#[None,1]# predict = tf.reshape(predict,[-1])loss = tf.square(predict-z)#平方,也可以用**2loss = tf.reduce_mean(loss)#没有形状,是个标量值,所有值加起来求平均,损失函数一定是个标量opt = tf.train.AdadeltaOptimizer(lr)train_op = opt.minimize(loss)return x,z,predict,train_opdef train(tensors,samples,session,epoches = 10000):#传入张量,样本x,z,_,train_op = tensorsxs,zs = samplesprint("train is start...")for _ in range(epoches):session.run(train_op,{x:xs,z:zs})print("train is finished!")def predict(tensors,xs,session):x,_,predic,_ = tensorsreturn session.run(predic,{x:xs})def main():#训练样本xs = np.arange(0, 2 * math.pi, 2*math.pi/(num_samples-1))  # np.arange()里面可以是小数# ys = np.sin(xs)  # [629]ys = [np.sin(xs),np.cos(xs),np.sqrt(xs)]  # [629]ys = np.transpose(ys)  #[None,2]plt.plot(xs,ys)with tf.Session() as session:tensors = get_tensors()  # 构建网络x,predict,train_opsession.run(tf.global_variables_initializer())#训练train(tensors,(xs,ys),session)#测试样本# xs = np.random.uniform(0,2*math.pi,[400])# xs = np.sort(xs)#排序函数xs = np.arange(0,2*math.pi,2*math.pi/(500))ys = predict(tensors,xs,session)#[None,2]plt.plot(xs,ys)plt.show()main()

训练注意事项

tf.placeholder()形状设置
1-如果是常数,则形状的中括号留空,如步长设置。
2-如果是不确定长度,则形状中括号设置None,否则会报错
3-tensorflow中如果在其他地方长度不确定,则需要设置-1
4-变量设置了名字后,不要复用(计算后用其他变量名保存结果,新手很容易犯这个毛病,就是照着老师代码抄的时候想做部分更改,如果出现feed不进去或者其他异常,则要考虑到这个原因,并进行检查),否则容易出现各种异常

步长设置代码样例

lr = tf.placeholder(tf.float32,[],"lr")#步长,中括号里面应该留空,如果设置None,则会提示异常,lr是个常数

样本设置、标签设置

 x = tf.placeholder(tf.float32,[None],"x")#训练的时候x要传入进去的,所以留空,训练数据y = tf.placeholder(tf.float32,[None],"y")

中间层设置方式

w1 = tf.get_variable("w1",[1,num],tf.float32)#随机初始化该值,运行随机生成

报错异常:
failed to create cublas handle: CUBLAS_STATUS_ALLOC_FAILED
解决方案:

config = tf.ConfigProto()
config.gpu_options.allow_growth = True
session = tf.Session(config=config, ...)

或者

gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.333)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))

python算法专项(六)——Tensorflow原理基础,三层网络相关推荐

  1. python算法专项(五)——numpy基础、数据保存,方差、标准差、协方差、协方差矩阵

    目录 1.numpy基础 2.数据保存与加载 2.1使用numpy方法保存和加载数据 2.2.使用pickle方法保存与加载数据 2.2.1保存加载一般的数据类型 2.2.2保存加载类及调用类方法 3 ...

  2. TensorFlow学习笔记(二十) tensorflow实现简单三层网络

    代码: import tensorflow as tf w1= tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1)) w2= tf.Varia ...

  3. 【Python算法系列十一】二叉树的3种遍历方式

    二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次. 遍历二叉树的方法主要分 3 种:先序遍历.中序遍历和后序遍历: 先序遍历指最先遍历节点本身, ...

  4. 【算法思想】Reed-Solomon 纠错编码基础概念,编码、解码算法原理、数学公式 Python代码实现

    [算法思想]Reed-Solomon 纠错编码基础概念,编码.解码算法原理.数学公式 & Python代码实现 文章目录 [算法思想]Reed-Solomon 纠错编码基础概念,编码.解码算法 ...

  5. 【重识云原生】第六章容器基础6.4.5.3节——Deployment实现原理解析

    <重识云原生系列>专题索引: 第一章--不谋全局不足以谋一域 第二章计算第1节--计算虚拟化技术总述 第二章计算第2节--主流虚拟化技术之VMare ESXi 第二章计算第3节--主流虚拟 ...

  6. 易懂的Bresenham 布雷森汉姆算法画圆的原理与Python编程实现教程

    Bresenham 布雷森汉姆算法画圆的原理与编程实现教程 注意:Bresenham的圆算法只是中点画圆算法的优化版本.区别在于Bresenham的算法只使用整数算术,而中点画圆法仍需要浮点数.注意: ...

  7. 0基础学python做什么工作好-零基础自学python到什么程度才有机会去小公司实习?...

    谢邀.小公司的要求不是很高.但是基本的做项目,解决问题的思路还是要有的.对算法,底层框架源码可能没有过多地要求 必须要掌握的技能有: 一.基础语法 1 变量 2 逻辑判断 3 循环 4 函数 /> ...

  8. [003]python数据类型一__python_全栈基础

    您好!此笔记的文本和代码以网盘形式分享于文末! 因个人能力有限,错误处欢迎大家交流和指正!基础部分内容简单,但多且零散!                                        ...

  9. 六星教育python怎么样_六星教育:Python怎么学?自学Python经验分享

    近些年,随着人工智能.大数据.自动化运维等行业的兴起,Python在编程方向上得天独厚的优势也凸显出来.随着Python工程师需求的日益增多,Python薪资也随之水涨船高.学习Python的同学越来 ...

最新文章

  1. PRML是模式识别和机器学习领域的经典著作
  2. 动态绑定 dgvlist 列
  3. java solar_java中的内部类总结
  4. Quartus调用Modelsim SE避免重复编译Altera器件库的方法
  5. Linux下安装MongoDB全程记录
  6. 使用AspectJ开发AOP更加便捷,你不知道嘛
  7. 华为云一站式AI开发平台ModelArts获2019全球智博会金奖
  8. 计算机基础第1次作业,计算机应用基础 第一次作业
  9. 什么是机器学习---人工智能工作笔记0012
  10. SQL SERVER 收缩数据库的命令
  11. 《巴伦周刊》:除了芯片,英特尔还是一家顶级风投
  12. 04 | 身份认证:除了账号密码,我们还能怎么做身份认证?
  13. C#窗体应用显示用户sa登录失败
  14. 2014武汉理工计算机专业李帅,武汉理工大学信息工程学院2014考研复试名单公示...
  15. SWUST OJ#480 Locker doors
  16. 桌面应用程序与web应用程序
  17. iOS/MAC 数据压缩与解压缩及常用算法 LZMA、ZLIB
  18. 深入浅出matplotlib(42):动画显示与MP4视频输出五
  19. 蓝牙技术|蓝牙Mesh照明技术照亮世界
  20. 史上最全颜色在古代的叫法(快速搜索)

热门文章

  1. Win10提示“为了对电脑进行保护,已经阻止此应用”怎么处理?
  2. 应用调试(三)oops
  3. 海格里斯HEGERLS深度解析|重型四向穿梭车的轨道换向组件及轨道系统
  4. Linux电脑睡眠后黑屏打不开,Win10系统下电脑休眠或睡眠无法唤醒屏幕黑屏打不开的解决方法...
  5. 野火FPGA-状态机
  6. 90后歌单精选100首,我有歌,你有故事吗?
  7. 微型计算机系统与接口重要吗,微型计算机系统与接口 马宏锋 等编著 第六章
  8. 计算机怎么一键到桌面快捷键,关于添加一键返回桌面快捷键在win10电脑中的技巧...
  9. 前端白屏问题_H5白屏问题
  10. 拼多多怎么设置不包邮?怎么看评价?