4、@staticmethod和@classmethod的用法
6、错误处理try...except 与 raise的用法7、字典中的items()、keys()、values()方法
(1)、items()方法将字典里对应的一对键和值以元组的形式(键, 值),存储为所生成序列里的单个元素
(2)、keys()方法将字典里的每个键以字符串的形式,存储为所生成序列里的单个元素
(3)、values()方法将字典里的每个值以字符串的形式,存储为所生成序列里的单个元素
from easydict import EasyDict as edict
config = edict()
config.TRAIN = edict() # 创建一个字典,key是Train,值是{}
config.Test = edict()
# config.TRAIN = {} # 这个和上面的那句话是等价的,相当于创建一个字典的key
config.TRAIN.batch_size = 25 # 然后在里面写值,表示Train里面的value也是一个字典
config.TRAIN.early_stopping_num = 10
config.TRAIN.lr = 0.0001
print(config)
输出:
{'TRAIN': {'batch_size': 25, 'early_stopping_num': 10, 'lr': 0.0001}, 'Test': {}}
如果利用Python中的字典创建会比较麻烦,所以利用edit()初始化来创建字典,这样创建起来就比较容易 。
eval函数实现的功能
- 将字符串string对象转化为有效的表达式参
- 求值运算返回计算结果
解决安全隐患,使用literal_eval方法。需先导入ast
import ast
f = '''{"isSucess":true, "result": '[{"name":"yoyo", "status": "200"}]'}'''
f1 = f.replace("true", "True").replace("false", "False").replace("null", "None")
print(ast.literal_eval(f1))
print(eval(f1))
tf.transpose(
matrix,
perm=None
)
- 输出数据tensor的第i维将根据perm[i]指定。比如,如果perm没有给定,那么默认是perm = [n-1, n-2, …, 0],其中rank(a) = n。
- 默认情况下,对于二维输入数据,其实就是常规的矩阵转置操作。
import tensorflow as tf
sess = tf.Session()
input_data = tf.constant([[1, 2, 3], [4, 5, 6]])
print(sess.run(tf.transpose(input_data)))
# [[1 4]
# [2 5]
# [3 6]]
print(sess.run(input_data))
# [[1 2 3]
# [4 5 6]]
print(sess.run(tf.transpose(input_data, perm=[1, 0])))
# [[1 4]
# [2 5]
# [3 6]]
input_data = tf.constant([[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]])
print('input_data shape: ', sess.run(tf.shape(input_data)))
# [1, 4, 3]
output_data = tf.transpose(input_data, perm=[2, 1, 0])
print('output_data shape: ', sess.run(tf.shape(output_data)))
# [3, 4, 1]
print(sess.run(output_data))
# [[[ 1]
# [ 4]
# [ 7]
# [10]]
#
# [[ 2]
# [ 5]
# [ 8]
# [11]]
#
# [[ 3]
# [ 6]
# [ 9]
# [12]]]
sess.close()
"""输入参数:
● a: 一个Tensor。
● perm: 一个对于a的维度的重排列组合。
● name:(可选)为这个操作取一个名字。
输出参数:
● 一个经过翻转的Tensor。"""
11、tf.gather用法
从’params"中,按照axis坐标和indices标注的元素下标,把这些元素抽取出来组成新的tensor.
测试代码:
import tensorflow as tf
import numpy as np
print("\n先测试一维张量\n")
t=np.random.randint(1,10,5)
g1=tf.gather(t,[2,1,4])
sess=tf.Session()
print(t)
print(sess.run(g1))
print("\n再测试二维张量\n")
t=np.random.randint(1,10,[4,5])
g2=tf.gather(t,[1,2,2],axis=0)
g3=tf.gather(t,[1,2,2],axis=1)
print(t)
print(sess.run(g2))
print(sess.run(g3))
结果如下:
先测试一维张量
[7 4 7 1 3]
[7 4 3]
再测试二维张量
[[5 5 7 4 3]
[8 7 6 5 2]
[6 9 4 4 8]
[7 3 3 2 2]]
[[8 7 6 5 2]
[6 9 4 4 8]
[6 9 4 4 8]]
[[5 7 7]
[7 6 6]
[9 4 4]
[3 3 3]]
12、tf.equal的使用
tf.equal(A, B)是对比这两个矩阵或者向量的相等的元素,如果是相等的那就返回True,反正返回False,返回的值的矩阵维度和A是一样的
import tensorflow as tf
import numpy as np
A = [[1,3,4,5,6]]
B = [[1,3,4,3,2]]
with tf.Session() as sess:
print(sess.run(tf.equal(A, B)))
输出:
[[ True True True False False]]
13、tf.where()用法
where(condition, x=None, y=None, name=None)的用法
condition, x, y 相同维度,condition是bool型值,True/False
返回值是对应元素,condition中元素为True的元素替换为x中的元素,为False的元素替换为y中对应元素
x只负责对应替换True的元素,y只负责对应替换False的元素,x,y各有分工
由于是替换,返回值的维度,和condition,x , y都是相等的。
看个例子:
import tensorflow as tf
x = [[1,2,3],[4,5,6]]
y = [[7,8,9],[10,11,12]]
condition3 = [[True,False,False],
[False,True,True]]
condition4 = [[True,False,False],
[True,True,False]]
with tf.Session() as sess:
print(sess.run(tf.where(condition3,x,y)))
print(sess.run(tf.where(condition4,x,y)))
结果:
1, [[ 1 8 9]
[10 5 6]]
2, [[ 1 8 9]
[ 4 5 12]]
tf.stack()这是一个矩阵拼接的函数,tf.unstack()则是一个矩阵分解的函数
c是拼接,而d和e则是不同维度的分解
15、tf用法大全:tf.add、tf.subtract、tf.multiply、tf.scalar_mul、tf.div、tf.divide、tf.truediv、tf.flo
import tensorflow as tf
x = tf.constant([[10, 20]], dtype=tf.float32)
y = tf.constant([[3, 4]], dtype=tf.float32)
with tf.Session() as sess:
# 对应元素 相加
print '\ntf.add(x, y) : ', sess.run(tf.add(x, y))
# 对应元素 相减
print '\ntf.subtract(x, y) : ', sess.run(tf.subtract(x, y))
# 对应元素 相乘
print '\ntf.multiply(x, y) : ', sess.run(tf.multiply(x, y))
# 所有元素 等比例放大
print '\ntf.scalar_mul(9.0, x) : ', sess.run(tf.scalar_mul(9.0, x))
# 对应元素 相除
print '\ntf.div(x, y) : ', sess.run(tf.div(x, y))
# 对应元素 相除
print '\ntf.divide(x, y) : ', sess.run(tf.divide(x, y))
# 对应元素 相除
print '\ntf.truediv(x, y) : ', sess.run(tf.truediv(x, y))
# 对应元素 地板除
print '\ntf.floordiv(x, y) : ', sess.run(tf.floordiv(x, y))
# 对应元素 截断除 取余
print '\ntf.truncatemod(x, y) : ', sess.run(tf.truncatemod(x, y))
# 对应元素 地板除 取余
print '\ntf.floormod(x, y) : ', sess.run(tf.floormod(x, y))
# 对应元素 相除 取余
print '\ntf.mod(x, y) : ', sess.run(tf.mod(x, y))
# 两组 3元素向量的tensor 交叉乘
print '\ntf.cross([[10, 20, 30]], [[1, 2, 3]]) : ', sess.run(tf.cross([[10, 20, 30]], [[1, 2, 1]]))
16、tf.image.crop_and_resize( )的用法
tf.image.crop_and_resize(image,boxes,box_ind,crop_size,methpd='bilinear',extrapolation_value=0,name=None)
image: 表示特征图
boxes:指需要划分的区域,输入格式为[ymin,xmin,ymax,xmax]
设crop的区域坐标是[y1,x1,y2,x2],那么想要得到相应正确的crop图形就一定要归一化,即图片的长度是[w,h],则实际输入的boxes为[y1/h,x1/w,y2/h,x2/w]。
不归一化的话,会自动进行补齐,超出1的就全变成成黑色框了。
box_ind: 是boxes和image之间的索引
crop_size: 表示RoiAlign之后的大小。
np.hstack(tup)
沿着水平方向将数组堆叠起来。
示例代码:
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
res = np.hstack((arr1, arr2))
print res
arr1 = np.array([[1, 2], [3, 4], [5, 6]])
arr2 = np.array([[7, 8], [9, 0], [0, 1]])
res = np.hstack((arr1, arr2))
print res
结果如下:
[1 2 3 4 5 6]
[[1 2 7 8]
[3 4 9 0]
[5 6 0 1]]
>>> 5//3
1
>>> -5//3
-2
>>> int(5.3)
5
>>> int(5.6)
5
>>> round(5.3)
5
>>> round(5.6)
6
//运算取整时保留整数的下界,int则是剪去小数部分,只保留前面的整数,round函数遵循四舍五入的法则。
import numpy as np
a=np.array([[ 8., 8.],[ 0., 0.]])
b=np.array([[ 1., 3.], [ 6., 4.]])
print np.vstack((a,b)) #将两个数组按行放到一起
[[8. 8.]
[0. 0.]
[1. 3.]
[6. 4.]]
print np.hstack((a,b)# 将两个数组按列放到一起
[[8. 8. 1. 3.]
[0. 0. 6. 4.]]
20、Cython 基本用法