Tech

Tensor là gì ?

Tên của Tensorflow có nguồn gốc trực tiếp từ Tensor. Trong Tensorflow, tất cả các phép tính liên quan đến các tensor. Một tensor là một vectơ hoặc ma trận có n chiều đại diện cho tất cả các loại dữ liệu. Tất cả các giá trị trong tensor giữ kiểu dữ liệu giống hệt nhau với hình dạng đã biết (hoặc đã biết một phần). Hình dạng của dữ liệu là kích thước của ma trận hoặc mảng.

Một tensor có thể được bắt nguồn từ dữ liệu đầu vào hoặc kết quả của một phép tính. Trong TensorFlow, tất cả các hoạt động được tiến hành bên trong một biểu đồ. Biểu đồ là một tập hợp các phép tính diễn ra liên tiếp. Mỗi thao tác được gọi là một node op và được kết nối với nhau.

Biểu đồ phác thảo các hoạt động và kết nối giữa các node. Tuy nhiên, nó không hiển thị các giá trị. Cạnh của các nút là tensor, tức là, một cách để điền hoạt động với dữ liệu.

Trong Học máy, các mô hình được cung cấp với danh sách các đối tượng được gọi là vectơ đặc trưng. Một vectơ đặc trưng có thể thuộc bất kỳ kiểu dữ liệu nào. Vectơ đặc trưng thường sẽ là đầu vào chính để điền vào một tensor. Các giá trị này sẽ chảy vào một nút op thông qua tensor và kết quả của hoạt động / tính toán này sẽ tạo ra tensor mới, đến lượt nó sẽ được sử dụng trong một hoạt động mới. Tất cả các hoạt động này có thể được xem trong biểu đồ.

Đại diện của một Tensor

Trong TensorFlow, tensor là tập hợp các vectơ đặc trưng (tức là mảng) có n-chiều. Ví dụ: nếu chúng ta có ma trận 2×3 với các giá trị từ 1 đến 6, chúng ta viết:

 

Đại diện của một Tensor

Đại diện của một Tensor

 

TensorFlow đại diện cho ma trận này là:

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

Nếu chúng ta tạo một ma trận ba chiều với các giá trị từ 1 đến 8, chúng ta có:

TensorFlow đại diện cho ma trận này là:

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

Lưu ý: Một tensor có thể được biểu diễn bằng vô hướng hoặc có thể có hình dạng nhiều hơn ba kích thước. Nó chỉ phức tạp hơn để hình dung cấp thứ nguyên cao hơn.

Các loại Tensor

Trong TensorFlow, tất cả các phép tính đều đi qua một hoặc nhiều tensor. Một tf.tensor là một đối tượng có ba thuộc tính:

  • Dnique label (name)
  • Dimension (shape)
  • Data type (dtype)

Mỗi hoạt động bạn sẽ thực hiện với TensorFlow liên quan đến việc thao tác một tensor. Có bốn loại tensor chính mà bạn có thể tạo:

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

Trong hướng dẫn này, bạn sẽ học cách tạo tf.constant và tf.Variable.

Trước khi chúng ta xem qua hướng dẫn, hãy đảm bảo rằng bạn đã kích conda  với TensorFlow. Chúng tôi đặt tên cho môi trường này là hello-tf.

Đối với người dùng MacOS:

source activate hello-tf

Đối với người dùng Windows:

activate hello-tf

Sau khi làm xong, bạn đã sẵn sàng nhập tensorflow

# Import tf
import tensorflow as tf

Tạo một tensor của thứ nguyên n

Bạn bắt đầu với việc tạo ra một tensor có một thứ nguyên, cụ thể là một đại lượng vô hướng.

Để tạo tensor, bạn có thể sử dụng tf.constant () như được hiển thị trong ví dụ về hình dạng tensor TensorFlow dưới đây:

tf.constant(value, dtype, name = "")
arguments

- `value`: Value of n dimension to define the tensor. 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`

Để tạo một tensor của thứ nguyên 0, hãy chạy đoạn mã sau

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

Output

Tensor("Const:0", shape=(), dtype=int16)

# Named my_scalar
r2 = tf.constant(1, tf.int16, name = "my_scalar") 
print(r2)

Output

Tensor("my_scalar:0", shape=(), dtype=int16)

Mỗi tensor được hiển thị bằng tên tensor. Mỗi đối tượng tensor được xác định với các thuộc tính tensor như nhãn (tên) duy nhất, kích thước (hình dạng) và các kiểu dữ liệu TensorFlow (dtype).

Bạn có thể xác định một tensor với các giá trị thập phân hoặc với một chuỗi bằng cách thay đổi kiểu dữ liệu.

# Decimal
r1_decimal = tf.constant(1.12345, tf.float32)
print(r1_decimal)
# String
r1_string = tf.constant("Guru99", tf.string)
print(r1_string)

Output

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

Một tensor của thứ nguyên 1 có thể được tạo ra như sau:

## Rank 1r1_vector = tf.constant([1,3,5], tf.int16)
print(r1_vector)
r2_boolean = tf.constant([True, True, False], tf.bool)
print(r2_boolean)

Output

Tensor("Const_3:0", shape=(3,), dtype=int16)
Tensor("Const_4:0", shape=(3,), dtype=bool)

Bạn có thể nhận thấy hình dạng TensorFlow chỉ bao gồm 1 cột.

Để tạo một mảng có 2 kích thước tensor, bạn cần đóng dấu ngoặc sau mỗi hàng. Kiểm tra ví dụ về hình dạng Keras Tensor bên dưới

## Hạng 2
r2_matrix = tf.constant ([[1, 2],
                          [3, 4]], tf.int16)
print (r2_matrix)

Output

Tensor("Const_5:0", shape=(2, 2), dtype=int16)

Ma trận có 2 hàng và 2 cột được điền các giá trị 1, 2, 3, 4.

Ma trận có 3 thứ nguyên được xây dựng bằng cách thêm một cấp khác với dấu ngoặc.

## Rank 3
r3_matrix = tf.constant([ [[1, 2],
                           [3, 4], 
                           [5, 6]] ], tf.int16)
print(r3_matrix)

Output

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

Ma trận trông giống như hình hai.

Hình dạng của tensor

Khi bạn in tensor, TensorFlow đoán hình dạng. Tuy nhiên, bạn có thể có được hình dạng của tensor với thuộc tính TensorFlow shape.

Dưới đây, bạn xây dựng một ma trận chứa một số từ 10 đến 15 và bạn kiểm tra hình dạng của m_shape

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

Output

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

Ma trận có 3 hàng và 2 cột.

TensorFlow có các lệnh hữu ích để tạo vectơ hoặc ma trận chứa 0 hoặc 1. Ví dụ: nếu bạn muốn tạo tensor 1-D với hình dạng cụ thể là 10, được điền bằng 0, bạn có thể chạy mã dưới đây:

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

Output

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

Thuộc tính cũng hoạt động cho ma trận. Tại đây, bạn tạo một ma trận 10×10 với 1

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

Output

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

Bạn có thể sử dụng hình dạng của một ma trận nhất định để tạo một vectơ của các ma trận. Ma trận m_shape có kích thước 3×2. Bạn có thể tạo một tensor có 3 hàng được lấp đầy bởi một hàng bằng mã sau:

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

Output

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

Nếu bạn chuyển giá trị 1 vào dấu ngoặc, bạn có thể xây dựng một vectơ của các giá trị bằng với số cột trong ma trận m_shape.

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

Output

Tensor("ones_2:0", shape=(2,), dtype=float32)

Cuối cùng, bạn có thể tạo ma trận 3×2 chỉ với một

print (tf.ones (m_shape.shape))

Output

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

Loại dữ liệu

Thuộc tính thứ hai của tensor là kiểu dữ liệu. Một tensor chỉ có thể có một loại dữ liệu tại một thời điểm. Một tensor chỉ có thể có một loại dữ liệu. Bạn có thể trả về kiểu với thuộc tính dtype.

print (m_shape.dtype)

Output

<dtype: 'int32'>

Trong một số trường hợp, bạn muốn thay đổi loại dữ liệu. Trong TensorFlow, có thể thực hiện được với phương thức tf.cast.

Thí dụ

Dưới đây, một tensor float được chuyển đổi thành số nguyên bằng cách bạn sử dụng phương thức ép kiểu.

# Change type of data
type_float = tf.constant(3.123456789, tf.float32)
type_int = tf.cast(type_float, dtype=tf.int32)
print(type_float.dtype)
print(type_int.dtype)

Output

<dtype: 'float32'>
<dtype: 'int32'>

TensorFlow chọn kiểu dữ liệu tự động khi đối số không được chỉ định trong quá trình tạo tensor. TensorFlow sẽ đoán đâu là loại dữ liệu có nhiều khả năng xảy ra nhất. Ví dụ: nếu bạn chuyển một văn bản, nó sẽ đoán đó là một chuỗi và chuyển nó thành chuỗi.

Tạo toán tử

Một số toán tử TensorFlow hữu ích

Bạn biết cách tạo một tensor với TensorFlow. Đã đến lúc học cách thực hiện các phép toán.

TensorFlow chứa tất cả các hoạt động cơ bản. Bạn có thể bắt đầu với một cái đơn giản. Bạn sẽ sử dụng phương pháp TensorFlow để tính bình phương của một số. Thao tác này đơn giản vì chỉ cần một đối số để tạo tensor.

Bình phương của một số được xây dựng bằng tf.sqrt (x) với x là số thực.

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

Output

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

Lưu ý: Kết quả trả về một đối tượng tensor và không phải là kết quả của bình phương 2. Trong ví dụ, bạn in định nghĩa của tensor chứ không phải đánh giá thực tế của hoạt động. Trong phần tiếp theo, bạn sẽ tìm hiểu cách hoạt động của TensorFlow để thực thi các hoạt động.

Sau đây là danh sách các thao tác thường được sử dụng. Ý tưởng là như nhau. Mỗi thao tác yêu cầu một hoặc nhiều đối số.

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

Thí dụ

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

tensor_add = tf.add(tensor_a, tensor_b)print(tensor_add)

Output

Tensor("Add:0", shape=(1, 2), dtype=int32)

Giải thích code

Tạo hai tensor:

  • một tensor với 1 và 2
  • một tensor với 3 và 4

Bạn cộng cả hai tensor.

Lưu ý : cả hai tenxơ cần phải có hình dạng giống nhau. Bạn có thể thực hiện một phép nhân trên hai chục.

# Multiply
tensor_multiply = tf.multiply(tensor_a, tensor_b)
print(tensor_multiply)

Output

Tensor("Mul:0", shape=(1, 2), dtype=int32)

Biến

Cho đến nay, bạn chỉ tạo ra các tenxơ không đổi. Nó không có giá trị sử dụng lớn. Dữ liệu luôn đến với các giá trị khác nhau, để nắm bắt điều này, bạn có thể sử dụng lớp Biến. Nó sẽ đại diện cho một nút nơi các giá trị luôn thay đổi.

Để tạo một biến, bạn có thể sử dụng phương thức tf.get_variable ()

Tên của Tensorflow có nguồn gốc trực tiếp từ Tensor. Trong Tensorflow, tất cả các phép tính liên quan đến các tensor. Một tensor là một vectơ hoặc ma trận có n chiều đại diện cho tất cả các loại dữ liệu. Tất cả các giá trị trong tensor giữ kiểu dữ liệu giống hệt nhau với hình dạng đã biết (hoặc đã biết một phần). Hình dạng của dữ liệu là kích thước của ma trận hoặc mảng.

Một tensor có thể được bắt nguồn từ dữ liệu đầu vào hoặc kết quả của một phép tính. Trong TensorFlow, tất cả các hoạt động được tiến hành bên trong một biểu đồ. Biểu đồ là một tập hợp các phép tính diễn ra liên tiếp. Mỗi thao tác được gọi là một node op và được kết nối với nhau.

Biểu đồ phác thảo các hoạt động và kết nối giữa các node. Tuy nhiên, nó không hiển thị các giá trị. Cạnh của các nút là tensor, tức là, một cách để điền hoạt động với dữ liệu.

Trong Học máy, các mô hình được cung cấp với danh sách các đối tượng được gọi là vectơ đặc trưng. Một vectơ đặc trưng có thể thuộc bất kỳ kiểu dữ liệu nào. Vectơ đặc trưng thường sẽ là đầu vào chính để điền vào một tensor. Các giá trị này sẽ chảy vào một nút op thông qua tensor và kết quả của hoạt động / tính toán này sẽ tạo ra tensor mới, đến lượt nó sẽ được sử dụng trong một hoạt động mới. Tất cả các hoạt động này có thể được xem trong biểu đồ.

Hình dạng của tensor

Khi bạn in tensor, TensorFlow đoán hình dạng. Tuy nhiên, bạn có thể có được hình dạng của tensor với thuộc tính TensorFlow shape.

Dưới đây, bạn xây dựng một ma trận chứa một số từ 10 đến 15 và bạn kiểm tra hình dạng của m_shape

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

Output

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

Ma trận có 3 hàng và 2 cột.

TensorFlow có các lệnh hữu ích để tạo vectơ hoặc ma trận chứa 0 hoặc 1. Ví dụ: nếu bạn muốn tạo tensor 1-D với hình dạng cụ thể là 10, được điền bằng 0, bạn có thể chạy mã dưới đây:

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

Output

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

Thuộc tính cũng hoạt động cho ma trận. Tại đây, bạn tạo một ma trận 10×10 với 1

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

Output

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

Bạn có thể sử dụng hình dạng của một ma trận nhất định để tạo một vectơ của các ma trận. Ma trận m_shape có kích thước 3×2. Bạn có thể tạo một tensor có 3 hàng được lấp đầy bởi một hàng bằng mã sau:

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

Output

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

Nếu bạn chuyển giá trị 1 vào dấu ngoặc, bạn có thể xây dựng một vectơ của các giá trị bằng với số cột trong ma trận m_shape.

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

Output

Tensor("ones_2:0", shape=(2,), dtype=float32)

Cuối cùng, bạn có thể tạo ma trận 3×2 chỉ với một

print (tf.ones (m_shape.shape))

Output

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

Loại dữ liệu

Thuộc tính thứ hai của tensor là kiểu dữ liệu. Một tensor chỉ có thể có một loại dữ liệu tại một thời điểm. Một tensor chỉ có thể có một loại dữ liệu. Bạn có thể trả về kiểu với thuộc tính dtype.

print (m_shape.dtype)

Output

<dtype: 'int32'>

Trong một số trường hợp, bạn muốn thay đổi loại dữ liệu. Trong TensorFlow, có thể thực hiện được với phương thức tf.cast.

Thí dụ

Dưới đây, một tensor float được chuyển đổi thành số nguyên bằng cách bạn sử dụng phương thức ép kiểu.

# Change type of data
type_float = tf.constant(3.123456789, tf.float32)
type_int = tf.cast(type_float, dtype=tf.int32)
print(type_float.dtype)
print(type_int.dtype)

Output

<dtype: 'float32'>
<dtype: 'int32'>

TensorFlow chọn kiểu dữ liệu tự động khi đối số không được chỉ định trong quá trình tạo tensor. TensorFlow sẽ đoán đâu là loại dữ liệu có nhiều khả năng xảy ra nhất. Ví dụ: nếu bạn chuyển một văn bản, nó sẽ đoán đó là một chuỗi và chuyển nó thành chuỗi.

Tạo toán tử

Một số toán tử TensorFlow hữu ích

Bạn biết cách tạo một tensor với TensorFlow. Đã đến lúc học cách thực hiện các phép toán.

TensorFlow chứa tất cả các hoạt động cơ bản. Bạn có thể bắt đầu với một cái đơn giản. Bạn sẽ sử dụng phương pháp TensorFlow để tính bình phương của một số. Thao tác này đơn giản vì chỉ cần một đối số để tạo tensor.

Bình phương của một số được xây dựng bằng tf.sqrt (x) với x là số thực.

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

Output

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

Lưu ý: Kết quả trả về một đối tượng tensor và không phải là kết quả của bình phương 2. Trong ví dụ, bạn in định nghĩa của tensor chứ không phải đánh giá thực tế của hoạt động. Trong phần tiếp theo, bạn sẽ tìm hiểu cách hoạt động của TensorFlow để thực thi các hoạt động.

Sau đây là danh sách các thao tác thường được sử dụng. Ý tưởng là như nhau. Mỗi thao tác yêu cầu một hoặc nhiều đối số.

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

Thí dụ

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

tensor_add = tf.add(tensor_a, tensor_b)print(tensor_add)

Output

Tensor("Add:0", shape=(1, 2), dtype=int32)

Giải thích code

Tạo hai tensor:

  • một tensor với 1 và 2
  • một tensor với 3 và 4

Bạn cộng cả hai tensor.

Lưu ý : cả hai tenxơ cần phải có hình dạng giống nhau. Bạn có thể thực hiện một phép nhân trên hai chục.

# Multiply
tensor_multiply = tf.multiply(tensor_a, tensor_b)
print(tensor_multiply)

Output

Tensor("Mul:0", shape=(1, 2), dtype=int32)

Biến

Cho đến nay, bạn chỉ tạo ra các tenxơ không đổi. Nó không có giá trị sử dụng lớn. Dữ liệu luôn đến với các giá trị khác nhau, để nắm bắt điều này, bạn có thể sử dụng lớp Biến. Nó sẽ đại diện cho một nút nơi các giá trị luôn thay đổi.

Để tạo một biến, bạn có thể sử dụng phương thức tf.get_variable ()

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, there is no need to include the `values` as the shape of `initializer` is used.

Ví dụ: đoạn mã dưới đây tạo một biến hai chiều với hai giá trị ngẫu nhiên. Theo mặc định, TensorFlow trả về một giá trị ngẫu nhiên. Bạn đặt tên biến là var

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

Output

(1, 2)

Trong ví dụ thứ hai, bạn tạo một biến có một hàng và hai cột. Bạn cần sử dụng [1,2] để tạo thứ nguyên của biến

Các giá trị viết tắt của tenxơ này bằng không. Ví dụ: khi bạn đào tạo một mô hình, bạn cần có các giá trị ban đầu để tính toán trọng lượng của các đối tượng địa lý. Dưới đây, bạn đặt các giá trị ban đầu này thành 0.

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

Output

(1, 2)

Bạn có thể chuyển các giá trị của một tensor không đổi vào một biến. Bạn tạo một tensor không đổi với phương thức tf.constant (). Bạn sử dụng tensor này để khởi tạo biến.

Các giá trị đầu tiên của biến là 10, 20, 30 và 40. tensor mới sẽ có hình dạng là 2×2.

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

Output

(2, 2)

Placeholder

Placeholder có mục đích cung cấp cho tensor. placeholder được sử dụng để khởi tạo dữ liệu để chuyển vào bên trong các tensor. Để cung cấp trình giữ chỗ, bạn cần sử dụng phương thức feed_dict. placeholder sẽ chỉ được cung cấp trong một Session.

Trong ví dụ tiếp theo, bạn sẽ thấy cách tạo placeholder bằng phương thức tf.placeholder. Trong phần tiếp theo, bạn sẽ học cách cung cấp một placeholder với giá trị tensor thực tế.

Cú pháp là:

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

Output

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

Session

TensorFlow hoạt động xung quanh 3 thành phần chính:

  • Đồ thị
  • Tensor
  • Session
Các thành phần Mô tả
Đồ thị Biểu đồ là cơ bản trong TensorFlow. Tất cả các phép toán (ops) được thực hiện bên trong một biểu đồ. Bạn có thể hình dung một biểu đồ như một dự án nơi mọi hoạt động được thực hiện. Các nút đại diện cho các hoạt động này, chúng có thể hấp thụ hoặc tạo ra các tenxơ mới.
Tensor Một tensor đại diện cho dữ liệu tiến triển giữa các hoạt động. Trước đây bạn đã thấy cách khởi tạo một tensor. Sự khác biệt giữa một hằng số và một biến số là các giá trị ban đầu của một biến số sẽ thay đổi theo thời gian.
Session Một session sẽ thực hiện thao tác từ biểu đồ. Để cung cấp biểu đồ với các giá trị của tensor, bạn cần mở một session. Bên trong một session, bạn phải chạy một toán tử để tạo đầu ra.

Đồ thị và session là độc lập. Bạn có thể chạy một session và nhận các giá trị để sử dụng sau này cho các tính toán tiếp theo.

Trong ví dụ dưới đây, bạn sẽ:

  • Tạo hai  tensors
  • Tạo một Toán tử
  • Mở một session
  • In kết quả

Bước 1) Bạn tạo hai hàng chục x và y

## Create, run  and evaluate a session
x = tf.constant([2])
y = tf.constant([4])

Bước 2) Bạn tạo toán tử bằng cách nhân x và y

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

Bước 3) Bạn mở một session. Tất cả các tính toán sẽ diễn ra trong session. Khi bạn hoàn thành, bạn cần phải đóng session.

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

Output

[số 8]

Giải thích mã

  • tf.Session (): Mở một session. Tất cả các hoạt động sẽ diễn ra trong các session
  • run (nhân): thực hiện thao tác đã tạo ở bước 2.
  • print (result_1): Cuối cùng, bạn có thể in kết quả
  • close (): Đóng session

Kết quả cho thấy 8, là phép nhân của x và y.

Một cách khác để tạo sessionlà bên trong một khối. Ưu điểm là nó tự động đóng session.

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

Output

[số 8]

Trong ngữ cảnh của session, bạn có thể sử dụng phương thức eval () để thực thi hoạt động. Nó tương đương với run (). Nó làm cho mã dễ đọc hơn.

Bạn có thể tạo một sessionvà xem các giá trị bên trong các tensors mà bạn đã tạo cho đến nay.

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

Output

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

Các biến trống theo mặc định, ngay cả sau khi bạn tạo một tensor. Bạn cần khởi tạo biến nếu bạn muốn sử dụng biến. Đối tượng tf.global_variables_initializer () cần được gọi để khởi tạo các giá trị của một biến. Đối tượng này sẽ khởi tạo rõ ràng tất cả các biến. Điều này rất hữu ích trước khi bạn đào tạo một người mẫu.

Bạn có thể kiểm tra giá trị của các biến mà bạn đã tạo trước đó. Lưu ý rằng bạn cần sử dụng run để đánh giá tensor

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

Output

[[-0,05356491 0,75867283]]
[[0 0]]
[[10 20] 
 [30 40]]

Bạn có thể sử dụng placeholder mà bạn đã tạo trước đó và cấp nó với giá trị thực tế. Bạn cần chuyển dữ liệu vào phương thức feed_dict.

Ví dụ: bạn sẽ lấy sức mạnh của 2 trong số data_placeholder_a trình giữ chỗ.

import numpy as np
power_a = tf.pow(data_placeholder_a, 2)
with tf.Session() as sess:  
data = np.random.rand(1, 10)  
print(sess.run(power_a, feed_dict={data_placeholder_a: data}))  # Will succeed.

Giải thích mã

  • import numpy as np: Nhập thư viện numpy để tạo dữ liệu
  • tf.pow (data_placeholder_a, 2): Tạo hoạt động
  • np.random.rand (1, 10): Tạo một mảng dữ liệu ngẫu nhiên
  • feed_dict = {data_placeholder_a: data}: Cung cấp dữ liệu cho phần giữ chỗ

Output

[[0,05478134 0,27213147 0,8803037 0,0398424 0,21172127 0,01444725 0,02584014 0,3763949 0,66022706 0,7565559]]

Đồ thị

TensorFlow phụ thuộc vào một cách tiếp cận thiên tài để hiển thị hoạt động. Tất cả các tính toán được biểu diễn bằng một lược đồ luồng dữ liệu. Biểu đồ luồng dữ liệu đã được phát triển để xem sự phụ thuộc dữ liệu giữa các hoạt động riêng lẻ. Công thức toán học hoặc thuật toán được thực hiện bằng một số phép toán liên tiếp. Biểu đồ là một cách thuận tiện để hình dung cách các phép tính được điều phối.

Biểu đồ cho thấy một nút và một cạnh . Nút là đại diện của một phép toán, tức là đơn vị tính toán. Cạnh là tensor, nó có thể tạo ra tensor mới hoặc tiêu thụ dữ liệu đầu vào. Nó phụ thuộc vào sự phụ thuộc giữa các hoạt động riêng lẻ.

Cấu trúc của biểu đồ kết nối các hoạt động với nhau (tức là các nút) và cách các hoạt động đó là nguồn cấp dữ liệu. Lưu ý rằng biểu đồ không hiển thị đầu ra của các hoạt động, nó chỉ giúp hình dung mối liên hệ giữa các hoạt động riêng lẻ.

Hãy xem một ví dụ.

Hãy tưởng tượng bạn muốn đánh giá hàm sau:

TensorFlow sẽ tạo một đồ thị để thực thi hàm. Biểu đồ trông như sau:

 

Ví dụ về đồ thị TensorFlow

 

Bạn có thể dễ dàng nhìn thấy con đường mà các tensors sẽ đi để đến đích cuối cùng.

Ví dụ, bạn có thể thấy thao tác thêm không thể được thực hiện trước và. Biểu đồ giải thích rằng nó sẽ:

  1. tính toán và:
  2. thêm 1) với nhau
  3. thêm vào 2)
  4. thêm 3) vào
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, z) + tf.pow(x, square) + z + c

Giải thích mã

  • x: Khởi tạo một biến có tên là x với giá trị không đổi là 5
  • z: Khởi tạo một biến có tên là z với giá trị không đổi là 6
  • c: Khởi tạo một tensor không đổi gọi là c với giá trị không đổi là 5
  • vuông: Khởi tạo một tensor không đổi được gọi là bình phương với giá trị không đổi là 2
  • f: Xây dựng toán tử

Trong ví dụ này, chúng tôi chọn giữ giá trị của các biến cố định. Chúng tôi cũng tạo ra một tensor không đổi được gọi là c là tham số không đổi trong hàm f. Nó nhận một giá trị cố định là 5. Trong đồ thị, bạn có thể thấy tham số này trong tensor được gọi là hằng số.

Chúng tôi cũng xây dựng một tensor không đổi cho lũy thừa trong toán tử tf.pow (). Nó không phải là cần thiết. Chúng tôi đã làm điều đó để bạn có thể thấy tên của tensor trong biểu đồ. Đó là hình tròn được gọi là hình vuông.

Từ biểu đồ, bạn có thể hiểu điều gì sẽ xảy ra với tensor và làm thế nào nó có thể trả về kết quả đầu ra là 66.

Đoạn mã dưới đây đánh giá chức năng trong một session.

init = tf.global_variables_initializer() # prepare to initialize all variables
with tf.Session() as sess:    
	init.run() # Initialize x and y    
    function_result = f.eval()
print(function_result)

Đầu ra

[66]

Tóm lược

TensorFlow hoạt động xung quanh:

  • Đồ thị : Môi trường tính toán chứa các phép toán và hàm căng
  • Tensors : Đại diện cho dữ liệu (hoặc giá trị) sẽ chảy trong biểu đồ. Nó là cạnh trong biểu đồ
  • session : Cho phép thực hiện các hoạt động

Tạo một tensor không đổi

không thay đổi vật
D0 tf.constant (1, tf.int16)
D1 tf.constant ([1,3,5], tf.int16)
D2 tf.constant ([[1, 2], [3, 4]], tf.int16)
D3 tf.constant ([[[1, 2], [3, 4], [5, 6]]], tf.int16)

Tạo một nhà điều hành

Tạo một nhà điều hành Vật
a + b tf.add (a, b)
a * b tf.multiply (a, b)

Tạo một tensor biến

Tạo một biến vật
giá trị ngẫu nhiên tf.get_variable (“var”, [1, 2])
giá trị đầu tiên được khởi tạo tf.get_variable (“var_init_2”, dtype = tf.int32, khởi tạo = [[1, 2], [3, 4]])

Mở một session

session vật
Tạo một session tf.Session ()
Chạy một session tf.Session.run ()
Đánh giá một tensor variable_name.eval ()
Đóng một session sess.close ()
Session theo khối với tf.Session () là sess:

Ví dụ: đoạn mã dưới đây tạo một biến hai chiều với hai giá trị ngẫu nhiên. Theo mặc định, TensorFlow trả về một giá trị ngẫu nhiên. Bạn đặt tên biến là var

# Tạo một biến
## Tạo 2 giá trị ngẫu nhiên
var = tf.get_variable ("var", [1, 2])
print (var.shape)

Output

(1, 2)

Trong ví dụ thứ hai, bạn tạo một biến có một hàng và hai cột. Bạn cần sử dụng [1,2] để tạo thứ nguyên của biến

Các giá trị viết tắt của tenxơ này bằng không. Ví dụ: khi bạn đào tạo một mô hình, bạn cần có các giá trị ban đầu để tính toán trọng lượng của các đối tượng địa lý. Dưới đây, bạn đặt các giá trị ban đầu này thành 0.

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

Output

(1, 2)

Bạn có thể chuyển các giá trị của một tensor không đổi vào một biến. Bạn tạo một tensor không đổi với phương thức tf.constant (). Bạn sử dụng tensor này để khởi tạo biến.

Các giá trị đầu tiên của biến là 10, 20, 30 và 40. tensor mới sẽ có hình dạng là 2×2.

# Tạo ma trận 2x2 ma trậntensor_const = tf.constant ([[10, 20],
[30, 40]])
# Khởi tạo giá trị đầu tiên của tensor bằng tensor_const
var_init_2 = tf.get_variable ("var_init_2", dtype = tf.int32, khởi tạo = tensor_const)
print (var_init_2.shape)

Output

(2, 2)

Placeholder

Placeholder có mục đích cung cấp cho tensor. placeholder được sử dụng để khởi tạo dữ liệu để chuyển vào bên trong các tensor. Để cung cấp trình giữ chỗ, bạn cần sử dụng phương thức feed_dict. placeholder sẽ chỉ được cung cấp trong một Session.

Trong ví dụ tiếp theo, bạn sẽ thấy cách tạo placeholder bằng phương thức tf.placeholder. Trong phần tiếp theo, bạn sẽ học cách cung cấp một placeholder với giá trị tensor thực tế.

Cú pháp là:

tf.placeholder (dtype, shape = None, name = None)
tranh luận:
- `dtype`: Loại dữ liệu
- `shape`: kích thước của trình giữ chỗ. Không bắt buộc. Theo mặc định, hình dạng của dữ liệu
- `name`: Tên của trình giữ chỗ. Không bắt buộc			
data_placeholder_a = tf.placeholder (tf.float32, name = "data_placeholder_a")
in (data_placeholder_a)

Output

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

Session

TensorFlow hoạt động xung quanh 3 thành phần chính:

  • Đồ thị
  • Tensor
  • Session
Các thành phần Mô tả
Đồ thị Biểu đồ là cơ bản trong TensorFlow. Tất cả các phép toán (ops) được thực hiện bên trong một biểu đồ. Bạn có thể hình dung một biểu đồ như một dự án nơi mọi hoạt động được thực hiện. Các nút đại diện cho các hoạt động này, chúng có thể hấp thụ hoặc tạo ra các tenxơ mới.
Tensor Một tensor đại diện cho dữ liệu tiến triển giữa các hoạt động. Trước đây bạn đã thấy cách khởi tạo một tensor. Sự khác biệt giữa một hằng số và một biến số là các giá trị ban đầu của một biến số sẽ thay đổi theo thời gian.
Session Một session sẽ thực hiện thao tác từ biểu đồ. Để cung cấp biểu đồ với các giá trị của tensor, bạn cần mở một session. Bên trong một session, bạn phải chạy một toán tử để tạo đầu ra.

Đồ thị và sessionlà độc lập. Bạn có thể chạy một session và nhận các giá trị để sử dụng sau này cho các tính toán tiếp theo.

Trong ví dụ dưới đây, bạn sẽ:

  • Tạo hai  tensors
  • Tạo một Toán tử
  • Mở một session
  • In kết quả

Bước 1) Bạn tạo hai hàng chục x và y

## Tạo, chạy và đánh giá một phiên
x = tf.constant ([2])
y = tf.constant ([4])

Bước 2) Bạn tạo toán tử bằng cách nhân x và y

## Tạo toán tử
nhân = tf.multiply (x, y)

Bước 3) Bạn mở một session. Tất cả các tính toán sẽ diễn ra trong session. Khi bạn hoàn thành, bạn cần phải đóng session.

## Tạo một phiên để chạy mã
sess = tf.Session () result_1 = sess.run (nhân)
in (kết quả_1)
sess.close ()

Output

[số 8]

Giải thích mã

  • tf.Session (): Mở một session. Tất cả các hoạt động sẽ diễn ra trong các session
  • run (nhân): thực hiện thao tác đã tạo ở bước 2.
  • print (result_1): Cuối cùng, bạn có thể in kết quả
  • close (): Đóng session

Kết quả cho thấy 8, là phép nhân của x và y.

Một cách khác để tạo sessionlà bên trong một khối. Ưu điểm là nó tự động đóng session.

với tf.Session () là sess:    
result_2 = nhân.eval ()
in (kết quả_2)

Output

[số 8]

Trong ngữ cảnh của session, bạn có thể sử dụng phương thức eval () để thực thi hoạt động. Nó tương đương với run (). Nó làm cho mã dễ đọc hơn.

Bạn có thể tạo một sessionvà xem các giá trị bên trong các tensors mà bạn đã tạo cho đến nay.

## Kiểm tra các bộ căng được tạo trước đó
sex = tf.Session ()
print (sess.run (r1))
print (sess.run (r2_matrix))
print (sess.run (r3_matrix))

Output

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

Các biến trống theo mặc định, ngay cả sau khi bạn tạo một tensor. Bạn cần khởi tạo biến nếu bạn muốn sử dụng biến. Đối tượng tf.global_variables_initializer () cần được gọi để khởi tạo các giá trị của một biến. Đối tượng này sẽ khởi tạo rõ ràng tất cả các biến. Điều này rất hữu ích trước khi bạn đào tạo một người mẫu.

Bạn có thể kiểm tra giá trị của các biến mà bạn đã tạo trước đó. Lưu ý rằng bạn cần sử dụng run để đánh giá tensor

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

Output

[[-0,05356491 0,75867283]]
[[0 0]]
[[10 20] 
 [30 40]]

Bạn có thể sử dụng placeholder mà bạn đã tạo trước đó và cấp nó với giá trị thực tế. Bạn cần chuyển dữ liệu vào phương thức feed_dict.

Ví dụ: bạn sẽ lấy sức mạnh của 2 trong số data_placeholder_a trình giữ chỗ.

nhập numpy dưới dạng np
power_a = tf.pow (data_placeholder_a, 2)
với tf.Session () là sess:  
data = np.random.rand (1, 10)  
print (sess.run (power_a, feed_dict = {data_placeholder_a: data})) # Sẽ thành công.

Giải thích mã

  • import numpy as np: Nhập thư viện numpy để tạo dữ liệu
  • tf.pow (data_placeholder_a, 2): Tạo hoạt động
  • np.random.rand (1, 10): Tạo một mảng dữ liệu ngẫu nhiên
  • feed_dict = {data_placeholder_a: data}: Cung cấp dữ liệu cho phần giữ chỗ

Output

[[0,05478134 0,27213147 0,8803037 0,0398424 0,21172127 0,01444725 0,02584014 0,3763949 0,66022706 0,7565559]]

Đồ thị

TensorFlow phụ thuộc vào một cách tiếp cận thiên tài để hiển thị hoạt động. Tất cả các tính toán được biểu diễn bằng một lược đồ luồng dữ liệu. Biểu đồ luồng dữ liệu đã được phát triển để xem sự phụ thuộc dữ liệu giữa các hoạt động riêng lẻ. Công thức toán học hoặc thuật toán được thực hiện bằng một số phép toán liên tiếp. Biểu đồ là một cách thuận tiện để hình dung cách các phép tính được điều phối.

Biểu đồ cho thấy một nút và một cạnh . Nút là đại diện của một phép toán, tức là đơn vị tính toán. Cạnh là tensor, nó có thể tạo ra tensor mới hoặc tiêu thụ dữ liệu đầu vào. Nó phụ thuộc vào sự phụ thuộc giữa các hoạt động riêng lẻ.

Cấu trúc của biểu đồ kết nối các hoạt động với nhau (tức là các nút) và cách các hoạt động đó là nguồn cấp dữ liệu. Lưu ý rằng biểu đồ không hiển thị đầu ra của các hoạt động, nó chỉ giúp hình dung mối liên hệ giữa các hoạt động riêng lẻ.

Hãy xem một ví dụ.

Hãy tưởng tượng bạn muốn đánh giá hàm sau:

TensorFlow sẽ tạo một đồ thị để thực thi hàm. Biểu đồ trông như sau:

 

Ví dụ về đồ thị TensorFlow

Ví dụ về đồ thị TensorFlow

 

Bạn có thể dễ dàng nhìn thấy con đường mà các tensors sẽ đi để đến đích cuối cùng.

Ví dụ, bạn có thể thấy thao tác thêm không thể được thực hiện trước và. Biểu đồ giải thích rằng nó sẽ:

  1. tính toán và:
  2. thêm 1) với nhau
  3. thêm vào 2)
  4. thêm 3) vào
x = tf.get_variable ("x", dtype = tf.int32, khởi tạo = tf.constant ([5]))
z = tf.get_variable ("z", dtype = tf.int32, khởi tạo = tf.constant ([6]))
c = tf.constant ([5], name = "hằng số") square = tf.constant ([2], name = "square")
f = tf.multiply (x, z) + tf.pow (x, square) + z + c

Giải thích mã

  • x: Khởi tạo một biến có tên là x với giá trị không đổi là 5
  • z: Khởi tạo một biến có tên là z với giá trị không đổi là 6
  • c: Khởi tạo một tensor không đổi gọi là c với giá trị không đổi là 5
  • vuông: Khởi tạo một tensor không đổi được gọi là bình phương với giá trị không đổi là 2
  • f: Xây dựng toán tử

Trong ví dụ này, chúng tôi chọn giữ giá trị của các biến cố định. Chúng tôi cũng tạo ra một tensor không đổi được gọi là c là tham số không đổi trong hàm f. Nó nhận một giá trị cố định là 5. Trong đồ thị, bạn có thể thấy tham số này trong tensor được gọi là hằng số.

Chúng tôi cũng xây dựng một tensor không đổi cho lũy thừa trong toán tử tf.pow (). Nó không phải là cần thiết. Chúng tôi đã làm điều đó để bạn có thể thấy tên của tensor trong biểu đồ. Đó là hình tròn được gọi là hình vuông.

Từ biểu đồ, bạn có thể hiểu điều gì sẽ xảy ra với tensor và làm thế nào nó có thể trả về kết quả đầu ra là 66.

Đoạn mã dưới đây đánh giá chức năng trong một session.

init = tf.global_variables_initializer () # chuẩn bị khởi tạo tất cả các biến
với tf.Session () là sess:    
	init.run () # Khởi tạo x và y    
    function_result = f.eval ()
print (function_result)

Đầu ra

[66]

Tóm lược

TensorFlow hoạt động xung quanh:

  • Đồ thị : Môi trường tính toán chứa các phép toán và hàm căng
  • Tensors : Đại diện cho dữ liệu (hoặc giá trị) sẽ chảy trong biểu đồ. Nó là cạnh trong biểu đồ
  • session : Cho phép thực hiện các hoạt động

Tạo một tensor không đổi

không thay đổi vật
D0 tf.constant (1, tf.int16)
D1 tf.constant ([1,3,5], tf.int16)
D2 tf.constant ([[1, 2], [3, 4]], tf.int16)
D3 tf.constant ([[[1, 2], [3, 4], [5, 6]]], tf.int16)

Tạo một nhà điều hành

Tạo một nhà điều hành Vật
a + b tf.add (a, b)
a * b tf.multiply (a, b)

Tạo một tensor biến

Tạo một biến vật
giá trị ngẫu nhiên tf.get_variable (“var”, [1, 2])
giá trị đầu tiên được khởi tạo tf.get_variable (“var_init_2”, dtype = tf.int32, khởi tạo = [[1, 2], [3, 4]])

Mở một session

session object
Tạo một phiên tf.Session ()
Chạy một session tf.Session.run ()
Đánh giá một tensor variable_name.eval ()
Đóng một session sess.close ()
session theo khối với tf.Session () là sess:

Blog Tiền Điện Tử

Blog tiền điện tử công thông tin tổng hợp uy tín nhất tất cả các mảng xã hội, giáo dục , công nghệ số. Với khả năng số hóa mạnh mẽ hy vọng sẽ mang lại cho quý bạn đọc những thông tin chính xác nhất 24/24
Back to top button