Breaking News
wp thumb 315

Thư viện Tensorflow là gì? Tổng quan về thư viện Tensorflow

Chào tất cả các bạn, trong bài viết này Nguyễn Văn Hiếu Blog tiếp tục trình bày series khóa học về thư viện Tensorflow. Nếu bạn chưa nắm được thông tin tutorial này, bạn hãy xem bài viết giới thiệu trước tiên nhé. Bài đầu tiên sẽ diễn tả chi tiết thông tin về khóa học này, các yêu cầu với người học, cài đặt môi trường và danh sách các bài học từ đầu đến cuối.

Lưu ý: Hiện nay Tensorflow đã nâng cấp lên phiên bản 2.x có nhiều sự thay đổi nên tài liệu này không còn phù hợp nữa, vui lòng xem tại TF Tutorials

Bạn đang xem: Thư viện Tensorflow là gì? Tổng quan về thư viện Tensorflow

Bài học trước: Giới thiệu về khóa học tensorflow

Trong bài viết ngày hôm nay, mình sẽ trình bày tổng quan về thư viện Tensorflow, bao gồm các nội dung sau:

  1. Giới thiệu tổng quan về Tensorflow
  2. Graph và Session

Giới thiệu tổng quan về thư viện Tensorflow

Thư viện Tensorflow là gì?

Thư viện Tensorfow là thư viện mã nguồn mở dùng cho tính toán số học sử dụng đồ thị luồng dữ liệu.

Biểu đồ dưới đây cho thấy mức độ tầm thường của thư viện này.

Mức độ tầm thường của Tensorflow tính từ lúc được Opensource

Tại sao lại là thư viện Tensorflow?

  • Tích hợp sẵn rất nhiều các thư viện machine learning
  • Có khả năng tương thích và mở rộng tốt. Được Google phát triển cho machine learning phục vụ cả nghiên cứu lẫn xây dựng các ứng dụng thực tế
  • Phổ biến
Biểu đồ lượt star và repos trên github sử dụng TF
Thống kê nhu cầu tensorflow của các nhà tuyển dụng

Một số project nổi tiếng sử dụng thư viện Tensorflow

  • Phân loại ung thư da – Dermatologist-level classification of skin cancer with deep neural networks (Esteva et al., Nature 2017)
  • WaveNet: Text to speech – Wavenet: A generative model for raw audio (Oord et al., 2016)
  • Vẽ hình – Draw Together with a Neural Network (Ha et al., 2017)
  • Image Style Transfer Using Convolutional Neural Networks (Gatys et al., 2016) Tensorflow adaptation by Cameroon Smith ([email protected])

Để bắt đầu sử dụng thư viện Tensorflow, bạn cần import thư viện này

Graph và Session trong Tensorflow

Data flow grpahs

Tensorflow phân biệt rạch ròi việc định nghĩa và tính toán trong quá trình thực thi. Bao gồm:

  1. Xây dựng, định nghĩa đồ thị(Graph)
  2. Sử dụng một Session để thực thi các tính toán trong đồ thị
Mô phỏng một đồ thị thành lập bởi TF

Khái niệm Tensor

Tensor là một mảng có n chiều (n-dimensional array). Chẳng hạn như:

  • 0-d tensor, còn được gọi là scalar hay chỉ là một số. Ví dụ: 1, 2, -5
  • 1-d tensor, còn được gọi là vector. Ví dụ: [1 2 3 4], [5 8 7 9]
  • 2-d tensor, còn được gọi là ma trận(matrix). Ví dụ: [1 2 3; 4 5 6; 7 8 9]
  • n-D tensor

Định nghĩa một Graph

Dưới đây là code python định nghĩa một graph dễ chơi nhất

import tensorflow as tf

a = tf.add(3, 5)

// Hoặc

import tensorflow as tf

x = tf.constant(3)

y = tf.constant(5)

a = tf.add(x, y)

Và bạn sẽ có biểu diễn trên TensorBoard như sau:

Như người chơi đã biết, một đồ thị thì sẽ có đỉnh(node) và các cạnh(edge). Trong TF, node có thể là các toán tử, hằng số, biến còn cạnh sẽ là các Tensor.

Như vậy, Tensor chính là dữ liệu(data): TensorFlow = tensor + flow = data + flow => luồng của các dữ liệu.

Nếu chúng ta thử in giá trị của a ra thì sao?

import tensorflow as tf

Xem thêm: Định nghĩa về đường trung tuyến trong tam giác cân

a = tf.add(3, 5)

print(a)

>> Tensor(“Add:0”, shape=(), dtype=int32)

Oh, không phải là con số 8 mà chúng ta đang nghĩ. Đó là bởi chúng ta mới chỉ đang xây dựng graph chứ chưa hề đến bước tính toán.

Làm sao để lấy được giá buốt trị ở a?

Tạo một Session và gán nó vào một biến(sess) để có thể sử dụng về sau.

Trong Session đó, thực thi bước tính toán của đồ thị để lấy ra giá trị của a.

import tensorflow as tf

a = tf.add(3, 5)

sess = tf.Session()

print(sess.run(a))

sess.close()

>> 8

Khi thực thi câu lệnh sess.run(a) session sẽ tự động tìm kiếm và tính toán trên tất cả các node cần để có được kết quả của a.

Bạn có thể sửa lại đoạn code trên để session tự đóng sau khi chấm dứt việc

import tensorflow as tf

a = tf.add(3, 5)

with tf.Session() as sess:

    print(sess.run(a))

tf.Session()

Session là môi trường để TF thực thi. Và đó cũng là nơi để các Tensor object được tính toán

Session cũng đồng thời cấp phát bộ nhớ để lưu giữ giá trị của các biến(Variables)

Một ví dụ Graph khác

x = 2

y = 3

op1 = tf.add(x, y)

op2 = tf.multiply(x, y)

op3 = tf.pow(op2, op1)

with tf.Session() as sess:

    op3 = sess.run(op3)

Sẽ có biểu diễn trên TensorBoard như sau:

SubGraphs

Nhìn hình phía trên, bởi vì chúng ta chỉ cần giá trị của pow_oppow_op lại không dựa dẫm gì vào useless . Do đó, session trong trường hợp này sẽ không tính giá trị của useless -> Tiết kiệm cho việc tính toán

Nhưng nếu game thủ muốn lấy cả giá trị của pow_op và uselessthì phải làm sao? Đây là giải pháp

x = 2

y = 3

add_op = tf.add(x, y)

mul_op = tf.multiply(x, y)

useless = tf.multiply(x, add_op)

pow_op = tf.pow(add_op, mul_op)

with tf.Session() as sess:

    z, not_useless = sess.run([pow_op, useless])

Xem thêm: Autocad là gì? Ứng dụng của Autocad trong đời sống thế nào?

Bạn chỉ cần truyền vào list các tensor mà bạn cần tính toán giá trị của nó. Chính là tham số fetches trong cú pháp của Session.run()

tf.Session.run(fetches,

     feed_dict=None,

         options=None,

         run_metadata=None)

tf.Graph()

Lưu ý: Khi import thư viện tensorflow, một graph mặc định đã được phát hành

Tạo mới 1 graph

Quản lý graph default

g = tf.get_default_graph()

Thêm 1 node vào graph vừa tạo

Cần set graph đó là graph default trước khi thêm

g = tf.Graph()

with g.as_default():

    x = tf.add(3, 5)

with tf.Session() as sess:

    sess.run(x)

Tránh nhầm lẫn giữa graph default và graph được tạo bởi người dùng => gây phát sinh lỗi về sau. Xem ví dụ sau:

g = tf.Graph() // Tạo thế hệ graph

# thêm vào default graph

a = tf.constant(3)

# Thêm vào graph tạo bởi người dùng

with g.as_default():

    b = tf.constant(5)

Trong trường hợp có 2 graph, hãy lưu ý khi thêm các ops(operations):

g1 = tf.get_default_graph()

g2 = tf.Graph()

# add ops to the default graph

with g1.as_default():

    a = tf.Constant(3)

# add ops to the user created graph

with g2.as_default():

    b = tf.Constant(5)

Tuy nhiên, KHÔNG NÊN tạo 2 graph nếu không thực sự cần thiết. Bởi:

  • Nhiều graph cũng sẽ cần nhiều session, mỗi session lại sử dụng các tài nguyên gây lãng phí
  • Không thể chia sẻ dữ liệu giữa các graph
  • Giải pháp sử dụng subgraph trong 1 graph là tốt hơn

Tại sao TF sử dụng Graph?

  1. Tối ưu trong tính toán. Cho phép chỉ tính toán các node cần để có được giá trị bạn muốn
  2. Chia bài toán thành các module nhỏ, giúp graph nhận biết module nào cần cho bài toán
  3. Tính toán phân tán, song song trên nhiều CPU, TPU, GPU hoặc trên nhiều máy
  4. Nhiều mô hình máy học sử dụng graph để học và biểu diễn(visualize)

Bài tiếp theo: Các toán tử căn bản trong Tensorflow

Nguồn: https://fusionsuitesvungtau.com.vn
Danh mục: Hỏi đáp ✅

Check Also

trang web aliexpress la gi cua nuoc nao va co uy tin khong 1 1

Trang web Aliexpress là gì, của nước nào và có uy tín không?

Trang web Aliexpress là gì, của nước nào và có uy tín không? Bạn sẽ được tìm hiểu cùng Giaonhan247 qua bài chia sẻ thiết thực sau đây.

Contact Us