OAL_Tengine学习Tengine_API
Tensorflow基础学习CNN卷积神经网络
4.1:卷积:
tf.nn.conv2d( input, filter, strides, padding, use_cudnn_on_gpu=True, data_format='NHWC',dilations=[1, 1, 1, 1], name=None, )
tf.nn.max_pool( value, ksize, strides, padding, data_format='NHWC', name=None, )
tf.truncated_normal( shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None, )
输出random的值,为一段正则分布数据。
shape: shape.
mean:分布的中间值。
stddev:标准偏移量。
seed:种子。
5.2:Tensor的重新设置shape:
x = tf.placeholder(tf.float32, [None, 784])
y = tf.placeholder(tf.float32, [None, 10])
x_image = tf.reshape(x, [-1, 28,28,1])
可以看到,x本来分配了一个Nx784的placeholder. 可现在需要把这个2-D Tensor转成 4-D Tensor。
可以使用reshape. 但数据一定要能够对上。 比如None份,就是batch.
28x28=784.
5.3:以MNIST为例,查看CNN训练过程:
5.3.1:第一层卷积
# 5x5. 1 ch. 32 conv kernel=32 output
W_conv1 = weight_variable([5,5,1,32])
b_conv1 = bias_variable([32])
首先创建第一层隐藏层的权值和偏移量。
卷积核:5x5.
卷积核个数:32个。 则输出32个特征图。
池化
#h_conv1. [100, 28,28,32]
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
#h_pool1: [100, 14, 14, 32]
h_pool1 = max_pool_2x2(h_conv1)
5.3.2:第二层卷积:
第一层卷积池化后,有32张特征图,每张图大小14x14.
第二层卷积层,卷积核大小为:5x5, 第一层卷积层的输出是32个特征图,此处作为输入,输出则为64个特征图
W_conv2 = weight_variable([5,5,32,64])
b_conv2 = bias_variable([64])
#h_conv2 [100, 14,14,64]
h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
#h_pool2 [100, 7, 7, 64]
h_pool2 = max_pool_2x2(h_conv2)
Tensorflow基础学习模型相关
机器学习基础概念
分类的输出是:A类、B类、C类。注意,所谓“分类”意味着ABC之间不存在排序,不存在谁比谁更亲密或更远、可能或更不可能。输出为A,那么不意味着真实为B的可能性比C更大
机器学习代价函数
Camera常用格式MJPEG和jpeg-turbo库
SELinux和在Android下应用初探
系统中通常有大量的文件和进程,为了节省时间和开销,通常我们只是选择性地对某些进程进行管制。
而哪些进程需要管制、要怎么管制是由政策决定的。
一套政策里面有多个规则。部分规则可以按照需求启用或禁用(以下把该类型的规则称为布尔型规则)。
规则是模块化、可扩展的。在安装新的应用程序时,应用程序可通过添加新的模块来添加规则。用户也可以手动地增减规则。
在 CentOS 7 系统中,有三套政策,分别是:
1. targeted:对大部分网络服务进程进行管制。这是系统默认使用的政策(下文均使用此政策)。
2. minimum:以 targeted 为基础,仅对选定的网络服务进程进行管制。一般不用。
3. mls:多级安全保护。对所有的进程进行管制。这是最严格的政策,配置难度非常大。一般不用,除非对安全性有极高的要求。
政策可以在 /etc/selinux/config 中设定。
D: 安全上下文(Security Context)
安全上下文是 SELinux 的核心。
安全上下文我自己把它分为「进程安全上下文」和「文件安全上下文」。
一个「进程安全上下文」一般对应多个「文件安全上下文」。
只有两者的安全上下文对应上了,进程才能访问文件。它们的对应关系由政策中的规则决定。
文件安全上下文由文件创建的位置和创建文件的进程所决定。而且系统有一套默认值,用户也可以对默认值进行设定。
需要注意的是,单纯的移动文件操作并不会改变文件的安全上下文。
安全上下文的结构及含义
安全上下文有四个字段,分别用冒号隔开。形如:system_u:object_r:admin_home_t:s0。
机器学习线性回归一
机器学习<二>代价函数
)Starting theta0 = 0, theta1 = 0, error = [12.88777069] Running... After theta0 = [3.99991926], theta1 = [3.00057397], error = [0.00133854]
机器学习梯度下降法
机器学习线性回归二
CRIM:城镇人均犯罪率。
ZN:住宅用地超过 25000 sq.ft. 的比例。
INDUS:城镇非零售商用土地的比例。
CHAS:查理斯河空变量(如果边界是河流,则为1;否则为0)。
NOX:一氧化氮浓度。
RM:住宅平均房间数。
AGE:1940 年之前建成的自用房屋比例。
DIS:到波士顿五个中心区域的加权距离。
RAD:辐射性公路的接近指数。
TAX:每 10000 美元的全值财产税率。
PTRATIO:城镇师生比例。
B:1000(Bk-0.63)^ 2,其中 Bk 指代城镇中黑人的比例。
LSTAT:人口中地位低下者的比例。
MEDV:自住房的平均房价,以千美元计。
机器学习六LogisticRegression
机器学习Logistic_Regression实例
机器学习Neural_Network一
机器学习Neural_Network二
Adaboost训练记录
image_location number_annotations x0 y0 w0 h0 x1 y1 w1 h1 … xN yN wN hN
代表 number_annotations 个目标在image_location中标注,x0 y0 w0 h0代表左上角的点的x和y坐标以及宽度和高度。
-img指定的单张图片,或者-info指定得样本集描述文件。
-vec 指定输出文件的保存位置。输出是一个以.vec结尾的文件,其中保存着生成得样本集,作为后续训练程序的输入
-num 指定样本集文件保存的样本数。
全部命令参数:
-img 源图像路径+文件名
-info 含有标定信息的样本集描述文件
-vec 含有样本集的.vec文件保存位置
-bg 背景集描述文件(负样本描述文件),用于生成混合变换得图像,将-img指定得图像放入-bg指定得背景图像,产生变换后得图像
-num 要产生得样本数量
-bgcolor 背景色,处于bgcolor-bgthresh和bgcolor+bgthresh之间的像素被视为透明的。the background color denotes the transparent color. Since there might be compression artifacts, the amount of color tolerance can be specified by –bgthresh. All pixels between bgcolor-bgthresh and bgcolor+bgthresh are regarded as transparent.
-bgthresh 背景色阈值 (灰度值的变化0-255)
-inv 颜色反转
-randinv 颜色随机反转
-maxidev 样本的最大像素变化值 (灰度值的变化0-255)
-maxxangle 绕x轴旋转得最大角度 (弧度为单位)
-maxyangle 绕y轴旋转得最大角度 (弧度为单位)
-maxzangle 绕z轴旋转得最大角度 (弧度为单位)
-show 显示变换后得图片,按’Esc’键省略后续的显示,通常用于调试效果
-w 输出样本的宽
-h 输出样本的高
traincascade.exe
使用adaboost算法训练模型的程序(新版),可开启openMP加速,支持数据量较大的训练。
输入:
-vec,正样本集的.vec文件,由createsamples.exe程序生成
-bg,负样本描述文件
-w -h
正样本图像的尺寸,必须跟使用createsamples创建得正样本尺寸保持一致,即.vec存储的图像尺寸
输出:
-data,最终模型的存放位置,模型文件以.xml结尾,中间文件亦存放于此。 这个目录必须已经存在。
全部命令参数:
-data 最终模型的存放位置(要先建好)
-vec 正样本集的.vec文件
-bg 负样本描述文件
-numPos 每级强分类器训练时用到得正样本数量
-numNeg 每级强分类器训练时用到得负样本数量
-numStages stages的数量(级联强分类器的层数,即强分类器的数量)
-precalcValBufSize 缓存大小,存储预先计算得特征值,单位MB,默认200
-precalcIdxBufSize 缓存大小,存储预先计算得特征索引,单位MB,默认200
-baseFormatSave 仅在使用Haar特征时有效,如果指定,级联分类器将以老格式存储 一定要加
-stageType 级联类型,BOOST
-featureType 特征类型,HAAR, LBP, HOG,默认HAAR
-w -h 正样本图像的尺寸,必须跟使用createsamples创建得正样本尺寸保持一致,即.vec存储的图像尺寸
-bt 训练算法类型,DAB(discrete Adaboost),RAB(RealAdaboost),
LB(LogiBoost),GAB(Gentle Adaboost)
-minHitRate 每级强分类器的最低检出率,总的最大检出率为
min_hit_rate^number_of_stages
-maxFalseAlarmRate 每级强分类器的最高误检率,总的误检率为
max_false_alarm_rate^number_of_stages,默认为0.5
-weightTrimRate Specifies wheter and how much weight trimming should be
used. A decent choice is 0.90.
-maxDepth 每级强分类器中弱分类器树的最大层数,If 1, then a simple
stump classifier is used, if 2 and more, then CART classifier
with number_of_splits internal (split) nodes is used
-maxWeakCount 每级强分类器中所能含有的弱分类器最大数目 目前300
-mode 使用Haar特征时,该参数指定BASIC、ALL、UpRight等类型
机器学习学习算法的评估的改进
神经网络与深度学习初起步
Python使用记录
lambda [arg1 [,arg2,.....argn]]: Exp
Iter1 1 2 3 4 5 sam test
Iter2 t1 t2 9 8 7
Iter3: H e l l o W o r l d !
0 1 1 2 3 5 8 13 21 34 55
os.walk(top, topdown=True, onerror=None, followlinks=False)
os.listdir(path=None)
问题一:既然可迭代对象也可以使用for循环遍历,为何还要使用迭代器呢?
一般情况下不需要将可迭代对象封装为迭代器。但是想象一种需要重复迭代的场景,在一个class中我们需要对输入数组进行正序、反序、正序step=1、正序step=2等等等等的多种重复遍历,那么我们完全可以针对每一种遍历方式写一个迭代容器,这样就不用每次需要遍历时都费劲心思的写一堆对应的for循环代码,只要调用相应名称的迭代器就能做到,针对每一种迭代器我们还可以加上类型判断及相应的处理,这使得我们可以不必关注底层的迭代代码实现。
从这种角度来看,你可以将迭代器看做可迭代对象的函数化,有一个非常流行的迭代器库itertools,其实就是如上所说的,他为很多可迭代类型提前定义好了一些列的常见迭代方式,并封装为了迭代器,这样大家就可以很方便的直接通过调用此模块玩转迭代。
此外iterator还可以节省内存,这点在问题二会描述。
问题二:生成器(generator)如何节约内存的?
generator的标志性关键字yield其实可以看作return,以本文上述的generator_list()方法为例,generator_list(a)就是一个生成器。
生成器最大的好处在于:generator_list(a)并不会真正执行函数的代码,只有在被循环时才会去获取值,且每次循环都return一个值(即yield一个值),在处理完毕后下次循环时依然使用相同的内存(假设处理单位大小一样)来获取值并处理,这样在一次for循环中函数好像中断(yield)了无数次,每次都用相同大小的内存来存储被迭代的值。
yield与return的最大区别就是yield并不意味着函数的终止,而是意味着函数的一次中断,在未被迭代完毕之前yield意味着先返回一次迭代值并继续下一次函数的执行(起始位置是上一次yeild语句结束),而return则基本意味着一个函数的彻底终止并返回一个全量的返回值。
因此generator是为了节省内存的,而且将函数写为一个生成器可以使函数变的可迭代,如果我们想遍历函数的返回值,我们不用再单独定义一个可迭代变量存储函数的返回值们,而是直接迭代生成器函数即可(除非函数本身返回一个全量的可迭代对象)。
同理iterator的__iter__()方法只是一个迭代的入口,每次调用__next__()时返回一个迭代值,同样以O(1)的空间复杂度完成了迭代。
问题三:iterator与generator的异同?
generator是iterator的一个子集,iterator也有节约内存的功效,generator也可以定制不同的迭代方式。