本文用来记录学习机器学习时遇到的tensorflow框架的相关问题及python基础语法的相关问题
1.tensor.eval()函数和session.run函数区别
假设你有个tensor t,t.eval()等价于tf.get_default_session(t),其中最主要的区别时session.run()可以再同一步获取多个tensor值
t = tf.constant(42.0)
u = tf.constant(37.0)
tu = tf.mul(t, u)
ut = tf.mul(u, t)
with sess.as_default():
tu.eval() # runs one step
ut.eval() # runs one step
sess.run([tu, ut]) # evaluates both tensors in a single step
2.tensor.argmax()函数解释
函数原型
tf.argmax(
input,
axis=None,
name=None,
dimension=None,
output_type=tf.int64
)
获得输入在制定轴的最大值的位置
例:
import tensorflow as tf
tf.reset_default_graph()
a=tf.get_variable(name='a',shape=[3,4],dtype=tf.float32,initializer=tf.random_uniform_initializer(minval=-1,maxval=1))
b=tf.argmax(a)
c=tf.argmax(input=a,dimension=0)
d=tf.argmax(input=a,dimension=1)
sess=tf.InteractiveSession()
sess.run(tf.initialize_all_variables())
print(sess.run(a))
print(sess.run(b))
print(sess.run(c))
print(sess.run(d))
输出
[[-0.77440333 -0.38460183 -0.36490536 -0.16382861]
[-0.4298625 -0.38621664 0.9929168 -0.02698684]
[ 0.54207134 0.48158026 -0.51101947 -0.55545044]]
[2 2 1 1]
[2 2 1 1]
[3 2 0]
不难看出,dimension默认为列,0代表以列为轴,1代表以行为轴。
3.遇到了一个bug
Variable a already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarScope? Originally defined at:
解决方法:
在代码出现tensor变量的最前面加一句
tf.reset_default_graph()
numpy.eye(N,M=None,k=0,dtype=<class 'float'>,order='C)
这个函数是生成对角矩阵
参数介绍:
1)N:int型,表示的是输出的行数
2)M:int型,可选项,输出的列数,如果没有就默认为N
3)k:int型,可选项,对角线的下标,默认为0表示的是主对角线,负数表示的是低对角,正数表示的是高对角。
4)dtype:数据的类型,可选项,返回的数据的数据类型
5)order:{‘C’,‘F’},可选项,也就是输出的数组的形式是按照C语言的行优先’C’,还是按照Fortran形式的列优先‘F’存储在内存中
在深度学习中,此函数可以将数组转换为one-hot形式.
例:
labels=np.array([[1],[0],[2],[1]])
res=np.eye(3)[labels.reshape(-1)] #3代表种类数,它可以把数组每个元素转为向量
print(res)
输出结果:
[[0. 1. 0.]
[1. 0. 0.]
[0. 0. 1.]
[0. 1. 0.]]
5.tf.cast()函数
此函数可以把tensor改变类型,函数原型为
tf.cast(
x,
dtype,
name=None
)
参数解释:
x:必选,你要改变类型的tensor变量
dtype:必选,目标类型
name:可选,此操作的名字
例:
import tensorflow as tf
sess=tf.Session()
x = tf.constant([1.8, 2.2], dtype=tf.float32)
z=tf.cast(x,tf.int32)
print(sess.run(z))
输出:[1 2]