前言: 并非详细介绍各种命令,只是以表格的形式记录学习过程中试过的一些简单命令,记录下来将来自己查阅方便。
tensorflow简介
TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从流图的一端流动到另一端计算过程。 TensorFlow是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统。
tensorflow编程概念
TensorFlow名称来自于张量tensor,张量可以理解为任意维度的数组:常见的标量就是零阶张量,矢量是一阶张量,矩阵理解为二阶张量。依次往上还有高阶张量,就是更加复杂的数据结构了。
借助TensorFlow指令,可以创建、销毁、操控张量。
TensorFlow图是一种图数据结构。TensorFlow程序可以创建多个图,图的节点是指令,图的边是张量。张量在经过每个节点,执行一个命令。一个指令的输出张量通常会变成后续指令的输入张量。
图中的张量由两种形式:常量和变量。在TensorFlow中,常量和张量可以理解为两种指令,常量是始终返回同一张量值的指令,变量是会返回分配给它的任何张量的指令。 TensorFlow编程可以理解为两步:1、将常量、变量和指令整合到一个图中,2、在一个会话中评估这些常量、变量和指令。
张量 Tensor
命令 | 功能 |
---|---|
import tensorflow as tf | python中导入tensorflow模块 |
mammal = tf.Variable("Elephant", tf.string) mystr = tf.Variable(["Hello"], tf.string) mymat = tf.Variable([[7],[11]], tf.int16) | 创建tensor目标 |
zeros = tf.zeros(my_matrix.shape[1]) | 制作与给定矩阵中的列数相同大小的零矢量 |
rank_three_tensor = tf.ones([3, 4, 5]) matrix = tf.reshape(rank_three_tensor, [6, 10]) | 重构tensor的形状 |
float_tensor = tf.cast(tf.constant([1, 2, 3]), dtype=tf.float32) | 转换张量的数据类型 |
with tf.Graph().as_default(): scalar = tf.zeros([]) vector = tf.zeros([3]) matrix = tf.zeros([2, 3]) with tf.Session() as sess: print ('scalar has shape', scalar.get_shape(), 'and value:\n', scalar.eval()) print ('vector has shape', vector.get_shape(), 'and value:\n', vector.eval()) print ('matrix has shape', matrix.get_shape(), 'and value:\n', matrix.eval()) | 定义0阶,1阶,2阶张量,并显示其形状和内容 |
with tf.Graph().as_default(): primes = tf.constant([2,3,5,7,11,13], dtype=tf.int32) ones = tf.constant(1, dtype=tf.int32) just_beyond_primes = tf.add(primes, ones) with tf.Session() as sess: print (just_beyond_primes.eval()) | 利用广播,元素级运算中的较小数组会增大到与较大数组具有相同的形状。 利用广播实现大小不同的张量的加法 |
with tf.Graph().as_default(): x = tf.constant([[5, 2, 4, 3], [5, 1, 6, -2], [-1, 3, -1, -2]], dtype=tf.int32) y = tf.constant([[2,2], [3, 5], [4, 5],[1, 6]], dtype=tf.int32) matrix_multiply_result = tf.matmul(x, y) with tf.Session() as sess: print(matrix_multiply_result.eval()) | 矩阵乘法:A*B,A的列数和B的行数相同才可以相乘 |
with tf.Graph().as_default(): matrix = tf.constant([[1,2], [3,4],[5, 6],[7, 8],[9,10],[11,12],[13, 14],[15, 16]], dtype=tf.int32) reshaped_2x2x4_tensor = tf.reshape(matrix, [2,2,4]) one_dimensional_vector = tf.reshape(matrix, [16]) with tf.Session() as sess: print("original matrix (8x2):") print(matrix.eval()) print("Reshaped tensor (2x2x4):") print(reshaped_2x2x4_tensor.eval()) print("1-D vector:") print(one_dimensional_vector.eval()) | 改变张量的形状 |
g = tf.Graph() with g.as_default(): v = tf.Variable([3]) w = tf.Variable(tf.random_normal([1], mean=1.0, stddev=0.35)) with tf.Session() as sess: initialization = tf.global_variables_initializer() sess.run(initialization) print (v.eval()) print (w.eval()) | 对于变量张量,要对张量运用初始化命令 |
with g.as_default(): with tf.Session() as sess: sess.run(tf.global_variables_initializer()) print (v.eval()) assignment = tf.assign(v, [7]) print (v.eval()) sess.run(assignment) print (v.eval()) | 用assign()对张量进行赋值的时候,也要执行run()命令后赋值命令才生效 |
with tf.Graph().as_default(), tf.Session() as sess: dice1 = tf.Variable(tf.random_uniform([10, 1], minval=1, maxval=7,dtype=tf.int32)) dice2 = tf.Variable(tf.random_uniform([10, 1],minval=1,maxval=7, dtype=tf.int32)) dice_sum = tf.add(dice1, dice2) resulting_matrix = tf.concat(values=[dice1, dice2, dice_sum], axis=1) sess.run(tf.global_variables_initializer()) print(resulting_matrix.eval()) | tf.random_uniform()产生某一范围类的均匀分布的固定大小的张量 tf.concat()延某一维度连接张量。axis参数指定维数 |