0.TensorFlow的基本运算
# 算术操作符:+ - * / % tf.add(x, y, name=None) # 加法(支持 broadcasting) tf.subtract(x, y, name=None) # 减法 tf.multiply(x, y, name=None) # 乘法 tf.divide(x, y, name=None) # 浮点除法, 返回浮点数(python3 除法) tf.mod(x, y, name=None) # 取余 # 幂指对数操作符:^ ^2 ^0.5 e^ ln tf.pow(x, y, name=None) # 幂次方 tf.square(x, name=None) # 平方 tf.sqrt(x, name=None) # 开根号,必须传入浮点数或复数 tf.exp(x, name=None) # 计算 e 的次方 tf.log(x, name=None) # 以 e 为底,必须传入浮点数或复数 # 取符号、负、倒数、绝对值、近似、两数中较大/小的 tf.negative(x, name=None) # 取负(y = -x). tf.sign(x, name=None) # 返回 x 的符号 tf.reciprocal(x, name=None) # 取倒数 tf.abs(x, name=None) # 求绝对值 tf.round(x, name=None) # 四舍五入 tf.ceil(x, name=None) # 向上取整 tf.floor(x, name=None) # 向下取整 tf.rint(x, name=None) # 取最接近的整数 tf.maximum(x, y, name=None) # 返回两tensor中的最大值 (x > y ? x : y) tf.minimum(x, y, name=None) # 返回两tensor中的最小值 (x < y ? x : y) # 三角函数和反三角函数 tf.cos(x, name=None) tf.sin(x, name=None) tf.tan(x, name=None) tf.acos(x, name=None) tf.asin(x, name=None) tf.atan(x, name=None) # 其它 tf.div(x, y, name=None) # python 2.7 除法, x/y-->int or x/float(y)-->float tf.truediv(x, y, name=None) # python 3 除法, x/y-->float tf.floordiv(x, y, name=None) # python 3 除法, x//y-->int tf.realdiv(x, y, name=None) tf.truncatediv(x, y, name=None) tf.floor_div(x, y, name=None) tf.truncatemod(x, y, name=None) tf.floormod(x, y, name=None) tf.cross(x, y, name=None) tf.add_n(inputs, name=None) # inputs: A list of Tensor objects, each with same shape and type tf.squared_difference(x, y, name=None)
# 矩阵乘法(tensors of rank >= 2) tf.matmul(a, b, transpose_a=False, transpose_b=False, adjoint_a=False, adjoint_b=False, a_is_sparse=False, b_is_sparse=False, name=None) # 转置,可以通过指定 perm=[1, 0] 来进行轴变换 tf.transpose(a, perm=None, name='transpose') # 在张量 a 的最后两个维度上进行转置 tf.matrix_transpose(a, name='matrix_transpose') # Matrix with two batch dimensions, x.shape is [1, 2, 3, 4] # tf.matrix_transpose(x) is shape [1, 2, 4, 3] # 求矩阵的迹 tf.trace(x, name=None) # 计算方阵行列式的值 tf.matrix_determinant(input, name=None) # 求解可逆方阵的逆,input 必须为浮点型或复数 tf.matrix_inverse(input, adjoint=None, name=None) # 奇异值分解 tf.svd(tensor, full_matrices=False, compute_uv=True, name=None) # QR 分解 tf.qr(input, full_matrices=None, name=None) # 求张量的范数(默认2) tf.norm(tensor, ord='euclidean', axis=None, keep_dims=False, name=None) # 构建一个单位矩阵, 或者 batch 个矩阵,batch_shape 以 list 的形式传入 tf.eye(num_rows, num_columns=None, batch_shape=None, dtype=tf.float32, name=None) # Construct one identity matrix. tf.eye(2) == > [[1., 0.], [0., 1.]] # Construct a batch of 3 identity matricies, each 2 x 2. # batch_identity[i, :, :] is a 2 x 2 identity matrix, i = 0, 1, 2. batch_identity = tf.eye(2, batch_shape=[3]) # Construct one 2 x 3 "identity" matrix tf.eye(2, num_columns=3) == > [[1., 0., 0.], [0., 1., 0.]] # 构建一个对角矩阵,rank = 2*rank(diagonal) tf.diag(diagonal, name=None) # 'diagonal' is [1, 2, 3, 4] tf.diag(diagonal) == > [[1, 0, 0, 0] [0, 2, 0, 0] [0, 0, 3, 0] [0, 0, 0, 4]] # 其它 tf.diag_part tf.matrix_diag tf.matrix_diag_part tf.matrix_band_part tf.matrix_set_diag tf.cholesky tf.cholesky_solve tf.matrix_solve tf.matrix_triangular_solve tf.matrix_solve_ls tf.self_adjoint_eig tf.self_adjoint_eigvals
1.常量
m1 = tf.constant([[3, 4]]) m2 = tf.constant([[3], [4]]) pro = tf.matmul(m1, m2) # 矩阵乘法 sess = tf.Session() res = sess.run(pro) print(res) print(m2) sess.close()
2.变量
2.1 变量的基本操作
# 定义变量 x = tf.Variable([1,2]) y = tf.constant([3,3]) sub = tf.subtract(x,y) # 矩阵减法 add = tf.add(x,sub) # 初始化全局变量 init = tf.global_variables_initializer() with tf.Session() as s: s.run(init) print(s.run(sub)) print(s.run(add))
2.2 变量的循环赋值
state = tf.Variable(0,name='conter') new = tf.add(state,1) # 赋值的方法 把后面的值赋给前面的变量 update = tf.assign(state,new) init = tf.global_variables_initializer() with tf.Session() as s: s.run(init) s.run(new) for i in range(5): s.run(update) print(s.run(state))
3.Fetch 和 Feed
## Fetch(run 的时候可以同时运行多个op) c1 = tf.constant(3.0) c2 = tf.constant(2.0) c3 = tf.constant(5.0) add = tf.add(c2,c3) mul = tf.multiply(add,c1) #乘法 with tf.Session() as s: f = s.run( [mul,add] ) print(f)
# 定义占位符 FEED 字典的形式传入 input1 = tf.placeholder(tf.float32) input2 = tf.placeholder(tf.float32) mul = tf.multiply(input1,input2) with tf.Session() as s: print(s.run(mul,feed_dict={input1:[7.],input2:[2.]}))
4.一个简单的线性回归的案例
# # 使用numpy生成随机点 x_d = np.random.rand(100) y_d = x_d*0.1+0.2 # 构建一个线性模型 b = tf.Variable(5.) k = tf.Variable(10.) y = k*x_d+b # 二次代价函数 (先求平方再求平均值) loss = tf.reduce_mean(tf.square(y_d-y)) # 优化器 梯度下降法 e = tf.train.GradientDescentOptimizer(0.2) # 最小化代价函数 t = e.minimize(loss) init = tf.global_variables_initializer() with tf.Session() as s: s.run(init) for i in range(501): s.run(t) if i%20 == 0: print(s.run([k,b]))
可以得到 k ,b 的值趋近于我们设定的值!