TensorFlow经典案例5:对前4次案例的一些思考与总结
一、关于numpy的random的使用:
1.rand随机值
In [2]: np.random.rand(3,2) Out[2]: array([[ 0.04287046, 0.68212741], [ 0.25322512, 0.50287344], [ 0.75530125, 0.55308281]])
2.randn返回样本具有标准正太分布
In [4]: np.random.randn(3,2) Out[4]: array([[-2.26840223, -0.24799291], [-0.81557012, 0.92537801], [ 0.04456033, -0.03864446]])
3.randint返回随机整数
In [8]: np.random.randint(2, size=10) Out[8]: array([0, 1, 1, 0, 0, 1, 0, 0, 0, 0])
In [9]: np.random.randint(1, size=5) Out[9]: array([0, 0, 0, 0, 0])
In [10]: np.random.randint(9, size=(4,5)) Out[10]: array([[2, 5, 3, 0, 0], [5, 5, 8, 0, 5], [8, 3, 3, 8, 1], [5, 5, 7, 4, 3]])
4.random([size])返回随机浮点数位于半开区间[0.0,1.0)
In [12]: np.random.random((3,5)) Out[12]: array([[ 0.9406723 , 0.88534251, 0.48993398, 0.04959344, 0.69200616], [ 0.8317934 , 0.02332241, 0.07543021, 0.26467834, 0.29640229], [ 0.79139576, 0.72745639, 0.04238559, 0.15145797, 0.40844399]])
5.choice从给定的数字中生成一个随机样本
#从np.arange(8)中选取大小问为3的样本 In [13]: np.random.choice(8,3) Out[13]: array([0, 2, 5])
In [14]: a = [3,5,6,8,2,6,8] In [15]: np.random.choice(a,1) Out[15]: array([3]) In [16]: np.random.choice(a,1) Out[16]: array([3]) In [17]: np.random.choice(a,3) Out[17]: array([2, 6, 8]) In [18]: np.random.choice(a,4) Out[18]: array([6, 3, 2, 8])
6.shuffle(x)打乱x的顺序
In [22]: arr = np.arange(9) In [23]: np.random.shuffle(arr) In [24]: arr Out[24]: array([6, 0, 2, 7, 1, 3, 5, 8, 4])
更多详细内容参考:http://www.mamicode.com/info-detail-507676.html
二、tf.reduce_sum()中的参数reduction_indices详解
distance = tf.reduce_sum(tf.abs(tf.add(x_train,tf.negative(x_test))),reduction_indices=1)
reduce_sum() 就是求和,由于求和的对象是tensor,所以是沿着tensor的某些维度求和。reduction_indices是指沿tensor的哪些维度求和。
具体见下图详细解释:
三、eval函数
1.Python中的eval函数的作用是把字符串有效的表达式并返回结果。
直接上代码例子:
In [1]: str1 = '1+4' In [2]: str2 = '[1,2,3,4,5,6,7]' In [3]: str3 = '[[1,],[2],[3,]]' In [6]: type(eval(str1)) Out[6]: int In [7]: type(eval(str2)) Out[7]: list In [8]: type(eval(str3)) Out[8]: list
2.TensorFlow中应用的Tensor.eval()函数:
print("Accuracy:",accuracy.eval({x:mnist.test.images,y:mnist.test.labels}))
Tensor.eval()是对Session.run()的代替,避免变量持有会话。
常用案例如下:
mat = tf.matmul(a,b) print(mat.eval())
四、Python格式化字符串 format()
用法:
它通过{}和:来代替传统%方式
1、使用位置参数
要点:从以下例子可以看出位置参数不受顺序约束,且可以为{},只要format里有相对应的参数值即可,参数索引从0开,传入位置参数列表可用*列表
>>> li = ['hoho',18]
>>> 'my name is {} ,age {}'.format('hoho',18)
'my name is hoho ,age 18'
>>> 'my name is {1} ,age {0}'.format(10,'hoho')
'my name is hoho ,age 10'
>>> 'my name is {1} ,age {0} {1}'.format(10,'hoho')
'my name is hoho ,age 10 hoho'
>>> 'my name is {} ,age {}'.format(*li)
'my name is hoho ,age 18'
2、使用关键字参数
要点:关键字参数值要对得上,可用字典当关键字参数传入值,字典前加**即可
>>> hash = {'name':'hoho','age':18} >>> 'my name is {name},age is {age}'.format(name='hoho',age=19) 'my name is hoho,age is 19' >>> 'my name is {name},age is {age}'.format(**hash) 'my name is hoho,age is 18'
3、填充与格式化
:[填充字符][对齐方式 <^>][宽度]
>>> '{0:*>10}'.format(10) ##右对齐 '********10' >>> '{0:*<10}'.format(10) ##左对齐 '10********' >>> '{0:*^10}'.format(10) ##居中对齐 '****10****'
4、精度与进制
>>> '{0:.2f}'.format(1/3) '0.33' >>> '{0:b}'.format(10) #二进制 '1010' >>> '{0:o}'.format(10) #八进制 '12' >>> '{0:x}'.format(10) #16进制 'a' >>> '{:,}'.format(12369132698) #千分位格式化 '12,369,132,698'
5、使用索引
>>> li ['hoho', 18] >>> 'name is {0[0]} age is {0[1]}'.format(li) 'name is hoho age is 18