-
【716-Week 02】由一般化到特殊化演变的树
2020-11-25 07:54:19就是需要多次访问磁盘来加载索引文件,会严重降低查找的速度,一次磁盘IO需要10ms左右,对于一个有上亿数据量的数据查找,需要大概20次左右的磁盘IO,就是200ms,所以真的是很... -
Tensorflow教程(六)——变量基础操作
2019-02-18 09:45:37不管一个多么大的程序最基本的单元都是变量,任何数值运算表达等都离不开...建模时它们需要被明确地初始化,模型训练后它们必须被存储到磁盘。这些变量的值可在之后模型训练和分析是被加载。 创建 当创建一个变...不管一个多么大的程序最基本的单元都是变量,任何数值运算表达等都离不开变量,所以我们从变量开始介绍。
当训练模型时,用变量来存储和更新参数。变量包含张量 (Tensor)存放于内存的缓存区。建模时它们需要被明确地初始化,模型训练后它们必须被存储到磁盘。这些变量的值可在之后模型训练和分析是被加载。创建
tf.Variable
tf.Variable(initial_value=None, trainable=True,collections=None, validate_shape=True, caching_device=None, name=None, variable_def=None, dtype=None, expected_shape=None, import_scope=None)
函数功能:创建一个新的变量,变量的值是initial_value,创建的变量会被添加到默认的计算图列表中,如果trainable被设置为True,这个变量还会被添加到计算图的集合中。
参数 含义 initial_value 默认值是None,张量或者是一个python对象可以转成张量,这个initial_value是初始化变量的值。它必须有一个特殊的shape,除非validate_shape设置为False trainable 默认的是True,变量还会被添加到GraphKeys.TRAINABLE_VARIABLES计算图集合中 collections 变量会被添加到这个集合中,默认的集合是[GraphKeys.GLOBAL_VARIABLES] validate_shape 如果是False,允许这个变量被初始化一个不知道shape。默认的是True,这个initial_value的shape必须是知道的 name 变量的名字 dypte 变量的类型,小数的默认是float32,整数默认是int32 weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35), name="weights") biases = tf.Variable(tf.zeros([200]), name="biases")
如上边的程序所示,使用
tf.Variable()
函数创建变量时,大多时间都是借助TensorFlow一些别的函数进行创建。调用tf.Variable()添加一些操作(Op, operation)到graph:
- 一个Variable操作存放变量的值。
- 一个初始化op将变量设置为初始值。这事实上是一个tf.assign操作.
- 初始值的操作,例如示例中对biases变量的zeros操作也被加入了graph。
tf.Variable的返回值是Python的tf.Variable类的一个实例。
初始化
全部变量初始化
init_op = tf.initialize_all_variables()
上边的程序就是对所有变量进行初始化的操作,方便快捷,但是应该注意,初始化操作必须是在完全构建好模型以后在进行这个操作,不然在后边进行新建的变量不会再进行初始化操作,使用位置如下边程序所示
# 创建两个变量 weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35), name="weights") biases = tf.Variable(tf.zeros([200]), name="biases") ... # 添加变量初始化的操作 init = tf.initialize_all_variables() with tf.Session() as sess: sess.run(init) ... ...
由另一个变量初始化
有些时候我们需要借助一个变量的初始化对另一个变量进行初始化,
initialized_value()
函数是对某一个变量进行初始化,不会对所用的变量进行操作。以直接把已初始化的值作为新变量的初始值,或者把它当做tensor计算得到一个值赋予新变量。# Create a variable with a random value. weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35), name="weights") # Create another variable with the same value as 'weights'. w2 = tf.Variable(weights.initialized_value(), name="w2") # Create another variable with twice the value of 'weights' w_twice = tf.Variable(weights.initialized_value() * 0.2, name="w_twice")
自定义初始化
tf.initialize_variables(var_list, name='init')
使用上边的程序我们能初始化列表里边的所有变量。
在会话中启动图形后,可以运行返回的op来初始化var_列表中的所有变量。此操作并行运行var_列表中变量的所有初始值设定项。如果var_list为空,函数仍然返回一个可以运行的op。那次行动没有效果。参数 含义 var_list 要初始化的变量对象列表 name 返回操作的可选名称 保存和加载
最简单的保存和恢复模型的方法是使用tf.train.Saver对象。构造器给graph的所有变量,或是定义在列表里的变量,添加save和restoreops。saver对象提供了方法来运行这些ops,定义检查点文件的读写路径。
检查点文件
变量存储在二进制文件里,主要包含从变量名到tensor值的映射关系。
当你创建一个Saver对象时,你可以选择性地为检查点文件中的变量挑选变量名。默认情况下,将每个变量Variable.name属性的值。保存变量
saver = tf.train.Saver()
上边的程序是创建
用tf.train.Saver()创建一个Saver来管理模型中的所有变量。# Create some variables. v1 = tf.Variable(..., name="v1") v2 = tf.Variable(..., name="v2") ... # Add an op to initialize the variables. init_op = tf.initialize_all_variables() # Add ops to save and restore all the variables. saver = tf.train.Saver() # Later, launch the model, initialize the variables, do some work, save the # variables to disk. with tf.Session() as sess: sess.run(init_op) # Do some work with the model. .. # Save the variables to disk. save_path = saver.save(sess, "/tmp/model.ckpt") print "Model saved in file: ", save_path
恢复变量
用同一个Saver对象来恢复变量。注意,当你从文件中恢复变量时,不需要事先对它们做初始化。
# Create some variables. v1 = tf.Variable(..., name="v1") v2 = tf.Variable(..., name="v2") ... # Add ops to save and restore all the variables. saver = tf.train.Saver() # Later, launch the model, use the saver to restore variables from disk, and # do some work with the model. with tf.Session() as sess: # Restore variables from disk. saver.restore(sess, "/tmp/model.ckpt") print "Model restored." # Do some work with the model ...
选择存储和恢复哪些变量
如果你不给tf.train.Saver()传入任何参数,那么saver将处理graph中的所有变量。其中每一个变量都以变量创建时传入的名称被保存。
有时候在检查点文件中明确定义变量的名称很有用。举个例子,你也许已经训练得到了一个模型,其中有个变量命名为"weights",你想把它的值恢复到一个新的变量"params"中。
有时候仅保存和恢复模型的一部分变量很有用。再举个例子,你也许训练得到了一个5层神经网络,现在想训练一个6层的新模型,可以将之前5层模型的参数导入到新模型的前5层中。
你可以通过给tf.train.Saver()构造函数传入Python字典,很容易地定义需要保持的变量及对应名称:键对应使用的名称,值对应被管理的变量。
注意:
如果需要保存和恢复模型变量的不同子集,可以创建任意多个saver对象。同一个变量可被列入多个saver对象中,只有当saver的restore()函数被运行时,它的值才会发生改变。
如果你仅在session开始时恢复模型变量的一个子集,你需要对剩下的变量执行初始化op。详情请见tf.initialize_variables()。# Create some variables. v1 = tf.Variable(..., name="v1") v2 = tf.Variable(..., name="v2") ... # Add ops to save and restore only 'v2' using the name "my_v2" saver = tf.train.Saver({"my_v2": v2}) # Use the saver object normally after that. ...
import tensorflow as tf import numpy as np # 使用 NumPy 生成假数据(phony data), 总共 100 个点. x_data = np.float32(np.random.rand(2, 100)) # 随机输入 y_data = np.dot([0.100, 0.200], x_data) + 0.300 # 构造一个线性模型 # b = tf.Variable(tf.zeros([1])) W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0)) y = tf.matmul(W, x_data) + b # 最小化方差 loss = tf.reduce_mean(tf.square(y - y_data)) optimizer = tf.train.GradientDescentOptimizer(0.5) train = optimizer.minimize(loss) # 初始化变量 # init = tf.initialize_all_variables() # 添加操作保存变量 saver = tf.train.Saver() # with tf.Session() as sess: # # Restore variables from disk. # saver.restore(sess, "./Model/model.ckpt") # print("Model restored.") # 启动图 (graph) sess = tf.Session() # Restore variables from disk. saver.restore(sess, "./Model/model.ckpt") print("Model restored.") print(sess.run(b)) # # 拟合平面 for step in range(0, 201): sess.run(train) if step % 20 == 0: print(step, sess.run(W), sess.run(b)) save_model_name = "./Model/" + str(step) + "_model.ckpt" save_path = saver.save(sess, save_model_name) print("Model saved in file: ", save_model_name)
-
mysql b树 io 读取_B树、B+树发展史
2021-02-07 06:20:55红黑树: 在平衡二叉树稳定性的基础上,再优化一下,减少旋转次数特性:1、每个...二叉树特点:查找速度和比较次数最小,但是磁盘IO,当数据量过大的时候,索引大小可能有几个G,不可能全都加载到内存引出下面的树更...红黑树: 在平衡二叉树稳定性的基础上,再优化一下,减少旋转次数
特性:
1、每个节点要么是红色,要么是黑色。
2、根节点必须是黑色。
3、红色节点不能连续(也即是,红色节点的孩子和父亲都不能是红色)。
4、对于每个节点,从该点至null(树尾端)的任何路径,都含有相同个数的黑色节点。
二叉树特点:查找速度和比较次数最小,但是磁盘IO,当数据量过大的时候,索引大小可能有几个G,不可能全都加载到内存
引出下面的树更稳
B树与B+树
B树 、B - 树都读B树。
B树与B+树区别:
B树每个节点都存储数据,所有节点组成这棵树。B+树只有叶子节点存储数据(B+数中有两个头指针:一个指向根节点,另一个指向关键字最小的叶节点),叶子节点包含了这棵树的所有数据,所有的叶子结点使用链表相连,便于区间查找和遍历,所有非叶节点起到索引作用。
B树中叶节点包含的关键字和其他节点包含的关键字是不重复的,B+树的索引项只包含对应子树的最大关键字和指向该子树的指针,不含有该关键字对应记录的存储地址。
B树中每个节点(非根节点)关键字个数的范围为[m/2(向上取整)-1,m-1](根节点为[1,m-1]),并且具有n个关键字的节点包含(n+1)棵子树。B+树中每个节点(非根节点)关键字个数的范围为[m/2(向上取整),m](根节点为[1,m]),具有n个关键字的节点包含(n)棵子树。
B+树中查找,无论查找是否成功,每次都是一条从根节点到叶节点的路径。
B树的优点:B树的每一个节点都包含key和value,因此经常访问的元素可能离根节点更近,因此访问也更迅速。
M阶B+数特点
有n棵子树的非叶子结点中含有n个关键字(b树是n-1个),这些关键字不保存数据,只用来索引,所有数据都保存在叶子节点(b树是每个关键字都保存数据)。
所有的叶子结点中包含了全部关键字的信息,及指向含这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接(叶子节点组成一个链表)。
所有的非叶子结点可以看成是索引部分,结点中仅含其子树中的最大(或最小)关键字。
通常在b+树上有两个头指针,一个指向根结点,一个指向关键字最小的叶子结点。
同一个数字会在不同节点中重复出现,根节点的最大元素就是b+树的最大元素。
B+树的优点
所有的叶子结点使用链表相连,便于区间查找和遍历。B树则需要进行每一层的递归遍历。相邻的元素可能在内存中不相邻,所以缓存命中性没有B+树好。
b+树的中间节点不保存数据,能容纳更多节点元素。
B树和B+树的共同优点
考虑磁盘IO的影响,它相对于内存来说是很慢的。数据库索引是存储在磁盘上的,当数据量大时,就不能把整个索引全部加载到内存了,只能逐一加载每一个磁盘页(对应索引树的节点)。所以我们要减少IO次数,对于树来说,IO次数就是树的高度,而“矮胖”就是b树的特征之一,m的大小取决于磁盘页的大小。
虽然查询次数比二叉树多,尤其当单一节点元素多时,但是相比磁盘IO速度,内存中的比较耗时几乎可以忽略
所以只要树的高度是够低,IO次数是足够少,就可以提升查找性能
IO:每一次读取的数据称之为一页.
B树示意图:
以下为 B+树示意图:
在MySQL中,最常用的两个存储引擎是MyISAM和InnoDB,它们对索引的实现方式是不同的
MyISAM : data存的是数据地址。索引是索引,数据是数据。索引放在XX.MYI文件中,数据放在XX.MYD文件中,所以也叫非聚集索引
InnoDB: data存的是数据本身。索引也是数据。数据和索引存在一个XX.IDB文件中,所以也叫聚集索引。
我们的Mysql数据库用的InnoDB。
了解了数据结构再看索引,一切都不费解了,只是顺着逻辑推而已。另加两种存储引擎的区别:
1、MyISAM是非事务安全的,而InnoDB是事务安全的
2、MyISAM锁的粒度是表级的,而InnoDB支持行级锁
3、MyISAM支持全文类型索引,而InnoDB不支持全文索引
4、MyISAM相对简单,效率上要优于InnoDB,小型应用可以考虑使用MyISAM
5、MyISAM表保存成文件形式,跨平台使用更加方便
6、MyISAM管理非事务表,提供高速存储和检索以及全文搜索能力,如果在应用中执行大量select操作可选择
7、InnoDB用于事务处理,具有ACID事务支持等特性,如果在应用中执行大量insert和update操作,可选择。
-
因为windows对磁盘读写的规律,一般都是缓存到系统缓冲中,不会实时刷新到磁盘扇区中。 目前还没找到办法如何把数据实时刷新到磁盘扇区中。 8,速度损失。经过xFsRedir软件重定向的速度肯定会有一定的损失,...
-
大学计算机基础大一考试必备题库.pdf
2020-08-02 14:47:114.任何程序都必须加载到( C )中才能被 CPU 执行。 A. 磁盘 B. 硬盘 C. 内 存 D. 外存 5.下列设备中,属于输出设备的是( A )。 A.显示器 B.键盘 C.鼠标 D.手字板 6.计算机信息计量单位中的 K 代表( B )... -
Auslogics_Disk_Defrag_Pro_4.3.0.0_破解补丁
2013-09-25 10:27:25最后,优化磁盘区算法可让您手动指定的文件类型,或者甚至是单个文件应被写入到磁盘的更快的一部分。 脱机碎片整理脱机碎片整理 新的脱机碎片整理引擎,使得它可以进行碎片整理重要的系统文件,通常锁定在Windows... -
windows蓝屏错误代码
2010-11-18 22:27:50138 0×0000008A 系统尝试将磁盘驱动器结合到已经结合过之磁盘驱动器的目录。 139 0×0000008B 系统尝试将磁盘驱动器替换成已经替换过之磁盘驱动器的目录。 140 0×0000008C 系统尝试将磁盘驱动器替换成已经替换过之... -
DOS 软盘+光盘+U盘+硬盘+NTFS 想拥有更强大的DOS功能??
2013-03-11 09:45:26③要运行光盘上的程序必须在启动时选择加载光驱驱动,否则无法转换到光驱的盘符。 你需要的文件都加好之后,就可以刻录光盘了(如下图): 完成后你就有了一张自己的DOS启动光盘喽。 5、将该光盘放入... -
Windows 系统错误代码简单分析
2010-04-14 11:21:57请确认所有需要的文件系统驱动程序都已经加载,而且卷没有任何损坏。 1006 某文件的卷已在外部改变,因而打开的文件不再有效。 1007 要求的操作无法以全屏幕模式执行。 1008 试图引用并不存在的符号。 ... -
MaxDOS_71PXE_G115.rar
2009-03-02 19:12:34Satacd.bat 任何菜单任何位置下快速加载SATA光驱驱动. Loadiso.bat Dos下载入iso光盘镜像.只能读取.不能引导.但可装2k/xp/2k3系统. 先切换到存放iso的目录.输入 Loadiso Xx.iso (xx为镜像文件名). Uniso.bat 卸载上... -
注:①测试使用小米9手机,单表数据量从最小100条到最大200W条,字段为30个String+一个自增ID,每个字符串长度都在20到30长度的随机字符,测试过程没有严格做到控制变量法,所以测试并不是很严谨,仅供参考;...
-
(重要)AIX command 使用总结.txt
2011-12-25 16:40:17AIX常用命令://查看机器序列号,IBM的基本信息都可以通过该命令查询得到 #prtconf #oslevel -r == uname -a //操作系统版本 #oslevel //查看操作系统版本ex :5.1.0.0 #oslevel -r //ex:5100-04 == oslevel -q //... -
除了一些全局配置和主 Activity 之外,不包含任何业务代码。有的也叫做空壳app 业务组件: 最上层的业务,每个组件表示一条完整的业务线,彼此之间互相独立。 该案例中分为:干活集中营,玩Android,知乎日报,...
-
windows 程序设计
2011-07-24 21:16:30任何Windows的历史介绍都必须包括一些OS/2的说明,OS/2是对DOS和Windows的另一种选择,最初是由Microsoft和IBM合作开发的。OS/2版本1.0(只有文字模式)在Intel 286(或者后来的)微处理器上运行,在1987年末发布。... -
当你系统崩溃时教你如何重装系统
2010-10-17 23:13:57在Windows XP拷贝完文件到硬盘,第一次重新启动计算机前,必须把光盘从光驱中取出,否则系统仍会 从光盘启动并会循环执行安装程序。 方法2: 然后,按任意键进入光驱启动模式,加载Mini版本的操作系统。 然后,按... -
电脑常见问题与故障1000例(高清PDF中文版)
2011-05-30 07:13:36本书分10章,共有1000多个实例,编写时从产生电脑故障的各个方面入手,涉及到硬件、软件等各方面的内容,其中包括开/关机中的问题、操作中的问题、软件运用的故障、外设故障以及病毒防治等等,这些都是个人电脑使用... -
[2010.10.14][封装工具][天空作品] Easy Sysprep v3 RC3(+ SkySRS3.00)
2010-11-25 12:10:315、再次重申,原版Win7的Syprep.exe 3.14在运行时同样具有一定的失败率,别将所有责任都推到ES3身上 6、更改XP部署模式,最后加入一个强制重启功能,避免系统因程序执行完毕判定失误而造成的部署后无法自动重启的... -
EXCEL集成工具箱V9.0 多国语言最终原版(2003-2010通用)
2011-01-07 20:40:25【取唯一值】 能瞬间取任意存储格区域的内容为不含重复值的唯一值清单,加载到工具中并提供随时随地调用,具有重复加载与读写的特点。 【添加注解】 可视化地窗体添加与修改注解功能。提供50种美观大方的批注样式供... -
电脑变慢de完全解决方案.
2009-09-21 11:00:52硬盘中有一个很宠大的数据交换文件,它是系统预留给虚拟内存作暂存的地方,很多应用程序都经常会使用到,所以系统需要经常对主存储器作大量的数据存取,因此存取这个档案的速度便构成影响计算机快慢的非常重要因素... -
Oracle Database 9i10g11g编程艺术:深入数据库体系结构(第2版)--详细书签版
2013-02-03 11:42:5314.5.1 并行DDL和使用外部表的数据加载 567 14.5.2 并行DDL和区段截断 568 14.6 并行恢复 576 14.7 过程并行化 577 14.7.1 并行管道函数 578 14.7.2 DIY并行化 580 14.7.3 老式DIY并行化 583 14.8 小结 587 ... -
Oracle 9i & 10g编程艺术:深入数据库体系结构(09年度畅销榜TOP50)(08年度畅销榜TOP50)--详细书签版
2013-02-06 18:24:20本书第1章强调不要把数据库当成一个黑盒,讨论了开发人员必须了解的数据库的基本特性和功能。第2章提供了一个创建Oracle数据库的绝好例子,从中你将深入地了解数据库和实例的概念。第3章介绍了各种类型的文件,特别... -
EXCEL集成工具箱V8.0完整增强版(精简)
2010-09-23 16:58:17【取唯一值】 能瞬间取任意存储格区域的内容为不含重复值的唯一值清单,加载到工具中并提供随时随地调用,具有重复加载与读写的特点。 【添加注解】 可视化地窗体添加与修改注解功能。提供50种美观大方的批注样式供... -
EXCEL集成工具箱V8.0 多国语言版(2003-2010通用)
2010-09-11 12:08:58【取唯一值】 能瞬间取任意存储格区域的内容为不含重复值的唯一值清单,加载到工具中并提供随时随地调用,具有重复加载与读写的特点。 【添加注解】 可视化地窗体添加与修改注解功能。提供50种美观大方的批注样式供... -
入门学习Linux常用必会60个命令实例详解doc/txt
2011-06-09 00:08:45在使用mount这个指令时,至少要先知道下列三种信息:要加载对象的文件系统类型、要加载对象的设备名称及要将设备加载到哪个目录下。 (1)Linux可以识别的文件系统 ◆ Windows 95/98常用的FAT 32文件系统:vfat ;... -
EXCEL集成工具箱V6.0
2010-09-11 01:44:37【取唯一值】 能瞬间取任意存储格区域的内容为不含重复值的唯一值清单,加载到工具中并提供随时随地调用,具有重复加载与读写的特点。 【添加注解】 可视化地窗体添加与修改注解功能。提供50种美观大方的批注样式供... -
iPhone开发秘籍(第2版)--源代码
2012-12-11 13:51:222.11 从Xcode到iPhone:Organizer Interface 54 2.11.1 Projects and Sources列表 54 2.11.2 Devices列表 55 2.11.3 iPhone Development Tools列表 55 2.11.4 Summary选项卡 55 2.11.5 Console选项卡 56 ... -
电脑高手必备 Windows系统35招实用技巧
2009-06-11 14:42:10(4)启用启动日志:启动Windows XP,同时将由系统加载的所有驱动程序 和服务记录到文件中。文件名为ntbtlog.txt,位于Windir目录中。该日志对 确定系统启动问题的准确原因很有用。 (5)启用VGA模式:使用基本... -
如何编写批处理文件批处理文件批处理文件
2010-04-14 10:36:10用户可选择d m e ,然后if语句将作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,... -
cmd操作命令和linux命令大全收集
2012-04-24 11:58:23tftp -i 自己IP(用肉机作跳板时这用肉机IP) get server.exec:server.exe 登陆后,将“IP”的server.exe下载到目标主机c:server.exe 参数:-i指以二进制模式传送,如传送exe文件时用,如不加-i 则以ASCII模式(传送... -
bug report
2020-12-02 02:24:18必须包含.exe.如果要运行批处理.bat, 可以使用 cmd.exe /c或者cmd.exe /k. * 2. 所有的路径必须要是C:\Windows这样的双斜杠分割,这是json的字符串规定。 * 3. 所有的路径都可以是相对路径,比如 .......