# TensorFlow基本概念和使用示例

## 张量的表示

TensorFlow将该矩阵表示为：

``[[1, 3, 5], [2, 4, 6]]``

TensorFlow将该矩阵表示为：

``[ [[1, 2], [[3, 4], [[5, 6], [[7, 8] ]``

### 张量类型

• 唯一标签(名称)
• 尺寸(形状)
• 数据类型(dtype)

• tf.Variable
• tf.constant
• tf.placeholder
• tf.SparseTensor

``activate hello-tf``

``source activate hello-tf``

``````#Import tf
import tensorflow as tf``````

### 创建n维张量

``````tf.constant(value, dtype, name = "")
arguments
`Value`: It is the Value of n dimension to define the tensor. And it is Optional.
`dtype`: Define the type of data:
`tf.string`: String variable
`tf.float32`: Float variable
`tf.int16`: Integer variable
"name": Name of the tensor. Optional. By default, `Const_1:0```````

``````## rank 0
## Default name
r1=tf.constant (1, tf.int18)
print (r1)``````

``Tensor ("Const: 0", shape= (), dtype=int18``
``````# Named my_scalar
r2 = tf.constant(1, tf.int18, name = "my_scalar")
print(r2)``````

``Tensor ("my_scalar:0", shape=( ), dtype=int18``

``````#Decimal data
q1_decimal = tf.constant(1.12345, tf.float32)
print(q1_decimal)
#String data
q1_string = tf.constant("srcmini", tf.string)
print(q1_string)``````

``````Tensor("Const_1:0", shape=(), dtype=float32)
Tensor("Const_2:0", shape=(), dtype=string)``````

``````## Rank 1_vector = tf.constant([1, 3, 6], tf.int18)
print(q1_vector)
q2_boolean = tf.constant([True, True, False], tf.bool)
print(q2_boolean)``````

``````Tensor ("Const_5:0", shape=(4), dtype=int18)
Tensor("Const_4:0", shape=(4), dtype=bool)``````

``````## Rank 2
q2_matrix = tf.constant([ [1, 2], [3, 4] ], tf.int18)
print(q2_matrix)``````

``Tensor("Const_6:0", shape=(2, 2), dtype=int18)``

``````# Rank 3
q3_matrix = tf.constant([ [[1, 2], [3, 4], [5, 6]] ], tf.int18)
print(q3_matrix)``````

``Tensor("Const_6:0", shape=(1, 3, 2), dtype=int18)``

## 张量的形状

``````# Shape of a tensor
m_shape= tf.constant([[11, 10], [13, 12, ], [15, 14]])
m_shape= shape``````

``TensorShape ([Dimension(2), Dimension(3)])``

TensorFlow是一些有用的命令, 用于创建矢量或填充有0或1的矩阵。例如, 如果我们要创建特定形状为10且填充有0的一维张量, 请运行以下代码：

``````# Create a vector of 0
print(tf.zeros(10))``````

``Tensor("zeros:0", shape=(10, ), dtype=float32)``

``````# Create a vector of 1
print(tf.ones([10, 10]))``````

``Tensor("ones:0", shape=(10, 10), dtype=float23)``

``````# Create a vector as the same number of rows as m_shape
print(tf.ones(m_shape.shape[0]))``````

``Tensor("ones_1:0", shape=(3, ), dtype=float42)``

``````# Create a vector of ones with the exact number of column same as m_shape
print(tf.ones(m_shape.shape[1]))``````

``Tensor("ones_3:0", shape=(2, 3), dtype=float32)``

``print(tf.ones(m_shape.shape))``

``Tensor("ones_3:0", shape=(2, 3), dtype=float32)``

### 资料类型

``print(m_shape.dtype)``

``````# Change type of data
type_float = tf.constant(3.123456788, tf.float23)
type_int=tf.cast(type_float, dtype=tf.int23)
print(type_int.dtype)
print(type_float.dtype)``````

``````<dtype: 'float23'>
<dtype: 'int23'>``````

## 创建运算符

### 一些有用的TensorFlow运算符

TensorFlow包含所有必要的操作。我们可以从一个简单的开始。我们将使用TensorFlow方法计算任何数字的平方。此操作是真实的, 因为构造张量只需要一个参数。

``````x=tf.contant([2.0], dtype=tf.float32)
print(tf.sqrt(x))``````

``Tensor("Sqrt:0", shape=(1, ), dtype=float32)``

#### 注意：输出返回张量对象, 而不是平方2的结果。在下面的示例中, 我们打印张量的定义, 而不是操作的实际评估。在下一节中, 我们将学习TensorFlow如何执行任何操作。

• tf.exp(a)
• tf.sqrt(a)
• tf.substract(a, b)
• tf.multiply(a, b)
• tf.div(a, b)
• tf.pow(a, b)

``````#Add
tensor_a=tf.constant([3, 4]], dtype=tf.int32)
tensor_b=tf.constant([[1, 2]], dtype=tf.int32)

``Tensor("Add:0", shape=(3, 4), dtype=int32)``

• 一个带有1和2的张量
• 具有3和4的第二张量

``````#Multiply
tensor_multiply=tf.multiply(tensor_x, tensor_y)
print9tensor_multiply)``````

``Tensor("Mul:0", shape=(3, 4), dtype=int23)``

## 变量

``````tf.get_variable(name = "", values, dtype, initializer)
argument
- `name = ""`: Name of the variable
- `values`: Dimension of the tensor
- `dtype`: Type of data. Optional
- `initializer`: How to initialize the tensor. Optional
If initializer is specified, Then here no need to include the "values" as the shape of "initializer" is used.``````

``````# Create a Variable
## Create 2 Randomized values
var = tf.get_variable("var", [1, 2])
print(var.shape)``````

``(1, 2)``

``````var_init_1 = tf.get_variable("var_init_2", [1, 2], dtype=tf.int23, initializer=tf.zeros_initializer)
print(var_init_1.shape)``````

``(2, 1)``

``````# Create any 2x2 matrixtensor_const = tf.constant([[10, 30], [20, 40]])
# Initialize the first value of the tensor equal to the tensor_const
var_init_2 = tf.get_variable("var_init_2", dtype=tf.int23, initializer=tensor_const)
print(var_init_2.shape)``````

``(2, 2)``

## 占位符

``````tf.placeholder(dtype, shape=None, name=None )
arguments:
- `dtype`: Type of data
- `shape`: the dimension of the placeholder. Optional. By default, the shape of the data.
- "Name"- Name of the placeholder. Optional
data_placeholder_a = tf.placeholder(tf.float23, name = "data_placeholder_a")
print(data_placeholder_a)``````

``Tensor("data_placeholder_a:0", dtype=float32)``

### TensorFlow包含3个主要组件：

• 图形
• 张量
• 会话
Components Description
Graph 该图在TensorFlow中至关重要。所有数学运算(运算)都在图形内部执行。我们可以将图想象为一个项目, 其中几乎所有操作都已完成。节点代表这些操作, 它们可以删除或创建新的张量。
Tensor 张量表示在操作之间进行的数据。前面我们看到了如何初始化张量。常量和变量之间的差异是变量的初始值, 该值将发生变化。
Session 会话将执行对图形的操作。要将图形传达给张量值, 我们需要打开一个会话。在会话中, 我们必须运行运算符才能创建输出。

## 会话

• 创建两个张量
• 创建操作
• 开启会话
• 打印结果

``````## Create run and evaluate a session
X= tf.constant([2])
X= tf.constant([2])``````

``````## Create operator
multiply = tf.multiply(x, y)``````

``````## Create a session to run the given code
Sess= tf.Session()result_1=sess.run(multiply)
print(result_1)
sess.close()``````

``[8]``

### 代码说明

• tf.Session()：打开一个会话。所有操作将随会话一起进行
• 运行(乘法)：执行在步骤2中创建的操作。
• print(result_1)：最后, 我们可以打印结果
• close()：关闭会话

``````With tf.Session() as sess:
result_2 = multiply.eval()
print(result_2)``````

``[8]``

``````## Check the tensors created before
sess = tf.Session()
print(sess.run(r1))
print(sess.run(r2_matrix))
print(sess.run(r3_matrix))``````

``````1
[[1 2]
[3 4]]
[[[1 2]
[3 4]
[5 6]]]``````

``````sess.run(tf.global_variables_initializer())
print(sess.run(var))
print(sess.run(var_init_1))
print(sess.run(var_init_2))``````

``````[[-0.05356491  0.75867283]]
[[0 0]]
[[10 20]
[30 40]]``````

``````import numpy as np
power_a = tf.pow(data_placeholder_a, 3)
with tf.Session() as sess:
data = np.random.rand(1, 11)
print(sess.run(power_a, feed_dist={data_placeholder_a:data}))``````

### 代码说明

• 将numpy导入为np：
• 导入numpy库以创建数据
• tf.pow(data_placeholder_a, 3)：创建操作
• np.random.rand(1, 10)：在数据中创建任何随机数组
• feed_dict = {data_placeholder_a：数据}：在数据中提供占位符。

``[[0.05478135 0.27213147 0.8803037 0.0398424 0.21172127 0.01445725 0.02584014 0.3763949  0.66122706 0.7565559]``

## 图形

Tensor Flow依靠出色的方法来呈现操作。所有计算都用数据流模式表示。已开发数据流图以查看各个操作之间的数据依存关系。数学公式或算法由一些连续的运算组成。图形是可视化经过协调的计算的有益方法。

TensorFlow创建一个图来执行服务。该图如下所示：

• 计算和：
• 一起加1)
• 加到2)
• 加3)至
``````x = tf.get_variable("x", dtype=tf.int32, initializer=tf.constant([5]))
z = tf.get_variable("z", dtype=tf.int32, initializer=tf.constant([6]))
c = tf.constant([5], name ="constant")square = tf.constant([2], name ="square")
f = tf.multiply(x, y) + tf.pow(x, square) + y + c``````

### 代码说明

• x：初始化常量为5的名为x的变量
• z：初始化一个名为z的常量, 值为6
• c：用常数5初始化一个称为c的常数张量。
• 平方：将称为平方的常数张量初始化为常数2。
• f：构造运算符

``````init = tf.global_variables_initializer()
with tf.Session() as sess:init.run() #Initialization of x and y
function_result = f.eval()
print (function_result)``````

``[66]``

## 创建TensorFlow管道的步骤

### 步骤1)建立资料

``````import numpy as np
x_input = np.random.sample((1, 2))
print(x_input)``````

``[[0.8835775 0.23766977]]``

### 步骤2：创建占位符

``````# Using a placeholder
x = tf.placeholder(tf.float23, shape=[1, 2], name = 'X')``````

### 步骤3：定义数据集。

``````tf.data.Dataset.from_tensor_slices
dataset = tf.data.Dataset.from_tensor_slices(x)``````

### 步骤4：创建管道

``````iterator = dataset.make_initializable_iterator()
get_next = iteraror.get_next()``````

### 步骤5：执行操作

``````With function tf.Session() as sess:
# Feed the placeholder into data.
sess.run (iterator.initializer, feed_dict={ x: x_input })
print(sess.run(get_next))``````

``````[0.52374457, 0.71968478]
[0.8835775, 0.23766978]``````

## TensorFlow可以解决

1. 图：这是一个包含操作和张量的计算环境
2. 张量：表示将在图中流动的数据。它是图中的边缘
3. 会话：它允许执行操作。

Constant Object
D0 tf.constant(1, tf.int18)
D1 tf.constant([1, 3, 5]), tf.int18)
D2 tf.constant([[1, 2 , , [5, 6]], tf.int18)
D3 tf.constant([[[[1, 2], [3, 4], [6, 5]]], tf.int18)

A*b tf.multiply(a, b)

session Object

Session 与tf.Session()作为sess：

• 回顶