python & tensorflow 学习笔记

python & tensorflow 学习记录

reference:
https://blog.csdn.net/u012193416/article/details/86525411
https://blog.csdn.net/m0_38024332/article/details/81779544
https://blog.csdn.net/m0_37393514/article/details/81777244

  • 查看tensor值
// 查看张量
import tensorflow as tf

a = tf.random_uniform(shape=[3],minval=0.0,maxval=1.0)    
        
with tf.Session() as sess:
	print(sess.run(a))
	
//或者是:

with tf.Session() as sess:
	print(a.eval())
  • tf.less(x,y,name=None)
    x,y 都是tenor, 返回值是一个bool型的tensor.[逐元素返回是否x<y]
    类似还有 tf.greater() , tf.less_equal()等
  • tf.case() 条件判断函数
 final_value = tf.case([(tf.less(a, b),case1_value)], default=case2_value)
  • tf.cond(), 同tf.case()
final_value = tf.cond(x > y, lambda: tf.add(x, y), lambda: tf.square(y))
  • tf.cast( x, dtype , name=None)
    将x的数据类型改为dtype, 返回x
  • tf.image.crop_and_resize()
    用来实现RPN中的ROI Pooling.
tf.image.crop_and_resize(
    image,
    boxes,
    box_ind,
    crop_size,
    method='bilinear',
    extrapolation_value=0,
    name=None
)
boxes:每个proposal的坐标(N,4)
	也指需要划分的区域,输入格式为 [[ymin,xmin,ymax,xmax]] (注意这是一个二维列表) 
	使用时要将输入值归一化为0--1范围,即:设crop的区域坐标为 [ y1,x1,y2,x2 ],
	那么想得到相应正确的crop图形就一定要归一化,如图片长度为 [ W,H ],
	则实际输入的boxes为[ y1/H,x1/W,y2/H,x2/W ]。
    如果没有归一化,程序将为你自动补齐,范围要是全部超出1,那就是个黑色框了,
    因为超出1根据归一化截取不到图片任何内容.
    
box_ind:  boxes和image之间的索引
	这里假设输入图片不止一张,boxes有多个.
	假设 img = [img1, img2]

        boxes = [boxes1, boxes2]

        box_ind = [ 1 , 0 ]

	那么,将返回
	[使用boxes1 作用于 img2 后的图片 , 使用boxes2 作用于 img1后的图片]
	
crop_size:表示Roi_pooling之后的大小
  • ROIpooling
    只是对roi区域,pool到固定长宽比如77大小的map, 即输出的每一个像素点,对应输入map的一个矩形区域,取这个矩形区域的最大值。结束,不再进行max pool.
    而 tf.image.crop_and_resize, 是把输入的map, 按照指定的boxes剪切,然后使用双线性插值到固定输出大小比如,7
    7。 roipool, 是对已经crop好的roi直接操作,到固定输出大小。 最大的区别是,一个是插值(从小到大), 一个是pool(从大到小), 到固定输出大小。
  • tf.squeeze 删除维度值为1的维度
tf.squeeze(
    input,
    axis = None,
    name = None,
    squeeze_dims = None
)
# 返回一个张量,这个张量是将原始input中所有维度为1的那些维都删掉的结果
# axis可以用来指定要删掉的为1的维度,此处要注意指定的维度必须确保其是1,否则会报错

# 't' 是一个维度[1, 2, 1, 3, 1, 1]的张量
tf.shape(tf.squeeze(t, [2, 4]))  # [1, 2, 3, 1],标号从零开始,只删掉了24维的1
  • tf.expand_dims(input, dim, name=None) 扩增张量的维度
    tf.reshape(input, shape=[ ])也可以达到相同效果,但是有些时候在构建图的过程中,placeholder没有被feed具体的值,这时就会报下面的错误:
    TypeError: Expected binary or unicode string, got 1
    这时可以使用 tf.expand_dims()
# 't2' is a tensor of shape [2, 3, 5] 
shape(expand_dims(t2, 0)) ==> [1, 2, 3, 5] 
shape(expand_dims(t2, 2)) ==> [2, 3, 1, 5]
shape(expand_dims(t2, 3)) ==> [2, 3, 5, 1]
  • tf.image.non_max_suppression 非极大值抑制
    按照参数scores的降序,贪婪的选择边界框的子集。
    删除掉那些与之前的选择的边框具有很高的IOU的边框。边框格式[y1,x1,y2,x2],(y1,x1)和 (y2,x2)是边框的对角坐标,当然也可以提供被归一化的坐标。返回的是被选中的那些留下来的边 框在参数boxes里面的下标位置。可以使用tf.gather的操作来从参数boxes中获取选中的边框。
tf.image.non_max_suppression(
    boxes,
    scores,
    max_output_size,
    iou_threshold=0.5,
    score_threshold=float('-inf'),
    name=None
)
# boxes:2-D的float类型的,大小为[num_boxes,4]的张量
# scores:1-D的float类型,大小为[num_boxes]代表每一个box的对应score;
# max_output_size:一个整数张量,代表最多可以选中多少个边框;
# iou_threshold:浮点数,表示与选中的那个边框的重叠度,重叠较高时删除score小的那个
# score_threshold:一个浮点数,score小于该值时删除这个边框
返回值:selected_indices:表示的是一个1-D的整数张量,大小为[M],代表选出来的留下来
	的边框下标,M小于等于max_output_size.
  • assert 断言
    可以理解assert断言语句为raise-if-not,用来测试表示式,其返回值为假,就会触发异常
# assert的异常参数,其实就是在断言表达式后添加字符串信息,
# 用来解释断言并更好的知道是哪里出了问题。格式如下:
assert expression [, arguments]

assert len(lists) >=5,'列表元素个数小于5'

assert 2==1,'2不等于1
  • ubuntu 下安装opencv
    https://blog.csdn.net/ksws0292756/article/details/79511170
    https://www.jianshu.com/p/259a6140da9d
  • tf.concat 与tf.stack
    矩阵拼接操作:
    tf.concat是沿某一维度拼接shape相同的张量,拼接生成的新张量维度不会增加。而tf.stack是在新的维度上拼接,拼接后维度加1
import tensorflow as tf
a = tf.constant([[1,2,3],[4,5,6]])
b = tf.constant([[7,8,9],[10,11,12]])
ab1 = tf.concat([a,b],axis=0)
ab2 = tf.stack([a,b], axis=0)
sess = tf.Session()
print(sess.run(ab1))
print(sess.run(ab2))
print ab1
print ab2

结果:

[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]#ab1的值

[[[ 1 2 3]
[ 4 5 6]]

[[ 7 8 9]
[10 11 12]]]#ab2的值
Tensor(“concat:0, shape=(4, 3), dtype=int32)#ab1的属性
Tensor(“stack:0, shape=(2, 2, 3), dtype=int32)#ab2的属性
  • tf.nn.sparse_softmax_cross_entropy_with_logits(y_, y):
    y表示的是实际类别,y_表示预测结果,把原来的神经网络输出层的softmax和cross_entrop放在一起计算,为了追求速度。
    **
    与tf.nn.softmax_cross_entropy_with_logits()函数十分相似,唯一的区别在于labels的shape,该函数的labels要求是排他性的,即只有一个正确的类别,如果labels的每一行不需要进行one_hot表示,可以使用tf.nn.sparse_softmax_cross_entropy_with_logits()。
    **
  • tf.transpose 矩阵转置
transpose(
    a,                          #  a是一个张量
    perm=None,                  # perm是对张量做转置的规则,即序列改变列表
    name='transpose'
   # perm列表里第i位的数字,表明转置后的第i个axis对应的是原来张量第perm[i]个axis
)
  • numpy 与tensor的相互转换
 #转化为numpy数组
numpy=tensor.eval(session=tf.Session)
#转化为tensor
tensor= tf.convert_to_tensor(numpy)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值