^Back To Top
Tensorflow là một thư viện mã nguồn mở được tạo bởi nhóm Google Brain, TensorFlow kết hợp với ngôn ngữ lập trình mã nguồn mở Python để hỗ trợ các nhà nghiên cứu tính toán trong lĩnh vực Machine learning dễ dàng và nhanh hơn.
Tensorflow có nhiều khái niệm phức tạp, trong phạm vi bài viết này chỉ giới thiệu các khái niệm quan trọng nhất trong Tensorflow ở mức cơ bản.
1. Node
Tensorflow mô tả lại dòng chảy của dữ liệu thông qua graph nên mỗi một điểm giao cắt trong graph thì được gọi là Node. Tại sao điều này quan trọng thì là vì các Node chính là điểm đại diện cho việc thay đổi của dữ liệu nên việc lưu trữ lại tham chiếu của các Node này là rất quan trọng.
2. Tensor
Tensor là cấu trúc dữ liệu trong tensorflow đại diện cho tất cả các loại dữ liệu. Nói cách khác, tất cả các kiểu dữ liệu khi đưa vào trong tensorflow thì đều được gọi là Tensor. Vậy nên có thể hiểu được Tensorflow là một thư viện mô tả, điều chỉnh dòng chảy của các Tensor. Tensor có 3 thuộc tính cơ bản là rank, shape và type.
Tensor là một kiểu dữ liệu dạng mảng có nhiều chiều được mô tả dạng Tensor = [[[1,1,1],[178,62,74]],[[45,2,2],[19,0,17]],[[7,5,2],[0,11,4]],[[8,13,5],[1,6,7]]]. Mảng nhiều chiều này được đính kèm thêm một vài thuộc tính tham chiếu khác. Các thuộc tính của Tensor được mô tả trong tài liệu bao gồm:
- device: Tên của thiết bị mà Tensor hiện tại sẽ được xuất bản. Có thể None.
- graph: Đồ thị chứa Tensor hiện tại.
- name: Tên của Tensor hiện tại.
- shape: Trả về TensorShape mô tả lại Shape của Tensor hiện tại.
- op: OperationToán tử / Phép toán được sử dụng để xuất bản Tensor hiện tại.
- dtype: Kiểu của các elementsPhần tử trong Tensor hiện tại.
3. Rank
Rank là số bậc của tensor. Ví dụ Tensor = [1] thì có rank = 1, Tensor = [[3,4],[5,6]] thì sẽ có rank = 2. Việc phân rank này khá quan trọng vì nó đồng thời cũng giúp phân loại dữ liệu của Tensor. Khi các rank đặc biệt cụ thể, Tensor có những tên gọi riêng như sau:
Scalar: Khi Tensor có rank bằng 0
Vector: Vector là một Tensor rank 1. .
Matrix: Đây là một Tensor rank 2 hay mảng hai chiều theo khái niệm của Python
N-Tensor: Khi rank của Tensor tăng lên lớn hơn 2, chúng được gọi chung là N-Tensor.
4. Shape
Shape là chiều của tensor. Vi dụ Tensor = [[[1,1,1],[178,62,74]]] sẽ có Shape = (1,2,3), Tensor = [[1,1,1],[178,62,74]] sẽ có Shape = (2,3).
5. Type
Type kiểu dữ liệu của các elements trong Tensor. Vì một Tensor chỉ có duy nhất một thuộc tính Type nên từ đó cũng suy ra là chỉ có duy nhất một kiểu Type duy nhất cho toàn bộ các elements có trong Tensor hiện tại.
6. Tạo chương trình Tensorflow đơn giản
Một chương trình Tensorflow được chia thành hai phần chính. Phần thứ nhất là xây dựng mô hình tính toán (được gọi là construction phase), phần thứ hai là chạy mô hình vừa mới xây dựng (được gọi là execution phase). Bây giờ mình sẽ hướng dẫn viết chương trình tính hàm f(x,y) trong hình 9.1.
Import Tensorflow
Để Tensorflow hoạt động trong python, chúng ta cần phải import >>> import tensorflow as tf
Xây dựng graph
Đầu vào để tính hàm f gồm 3 node trong đó node x và node y là các biến số còn 2 là hằng số. Bây giờ ta sẽ tạo 3 node này.
>>> x = tf.Variable(3, name="x")
>>> y = tf.Variable(4, name="y")
>>> f = x*x*y + y + 2
hoặc có thể tạo như sau
>>> x = tf.Variable(3, name="x")
>>> y = tf.Variable(4, name="y")
>>> z = tf.constant(2)
>>> f = x*x*y + y + z
f cũng có thể tạo bằng cách
>>> f = tf.add(tf.add(tf.multiply(tf.multiply(x,x), y), y), 2)
7. Chạy mô hình vừa xây dựng
Thực tế các câu lệnh trên không thực thi bất kì một phép tính nào mặc dù nó chứa các phép toán. Thậm chí các biến x, y cũng không được khởi tạo bởi 2 giá trị 3 và 4. Để chạy mô hình này ta cần phải mở một sesion và dùng nó để thiết lập giá trị cho 2 biến x, y và tính toán hàm f (biến z không cần thiết lập vì dùng tf.constant thì nó đã được gán giá trị là hằng số rồi).
>>> sess = tf.Session()
>>> sess.run(x.initializer)
>>> sess.run(y.initializer)
>>> result = sess.run(f)
>>> print(result) #42
>>> sess.close()
Thay vì sess.run() cho tất cả các node, ta có thể dùng cách sau
with tf.Session() as sess:
x.initializer.run()
y.initializer.run()
result = f.eval()
print(result)
Hàm f ở đây chỉ có 2 biến là x và y nên ta có thể khởi tạo từng biến một nhưng trong mạng neural network có hàng nghìn, hàng triệu biến thì chẳng nhẽ ta phải ngồi code hàng nghìn dòng khởi tạo biến hay sao? Câu trả lời là không. Thay vì khởi tạo từng biến, ta dùng hàm global_variables_initializer() để khởi tạo tất cả các biến
init = tf.global_variables_initializer()
with tf.Session() as sess:
init.run()
result = f.eval()
8. Kết luận
Bài viết trình bài một số khái niệm cơ bản nhất trong Tensorflow, đồng thời cài đặt và thử nghiệm một số ví dụ đơn giản, hy vọng bạn đọc sinh viên có thể tự nghiên cứu về Tensorflow để thử nghiệm với những tính toán phức tạp hơn.
TÀI LIỆU THAM KHẢO
1. https://www.tensorflow.org/
2. https://www.infoworld.com/article/3278008/what-is-tensorflow-the-machine-learning-library-explained.html
3. Matthew Scarpino, TensorFlow for dummies, 2018