TensorFlow là gì? Làm thế nào nó hoạt động? Giới thiệu & Archikiến trúc

Hãy bắt đầu hướng dẫn này với phần giới thiệu TensorFlow:

TensorFlow là gì?

TensorFlow là một nền tảng end-to-end nguồn mở để tạo các ứng dụng Machine Learning. Đó là một thư viện toán học tượng trưng sử dụng luồng dữ liệu và lập trình vi phân để thực hiện các nhiệm vụ khác nhau tập trung vào việc đào tạo và suy luận về mạng lưới thần kinh sâu. Nó cho phép các nhà phát triển tạo các ứng dụng học máy bằng nhiều công cụ, thư viện và tài nguyên cộng đồng khác nhau.

Hiện nay, thư viện deep learning nổi tiếng nhất thế giới là TensorFlow của Google. Sản phẩm của Google sử dụng công nghệ máy học trong tất cả các sản phẩm của mình để cải thiện công cụ tìm kiếm, bản dịch, chú thích hình ảnh hoặc đề xuất.

Ví dụ về TensorFlow

Để đưa ra một ví dụ cụ thể, người dùng Google có thể trải nghiệm trải nghiệm tìm kiếm nhanh hơn và tinh tế hơn với AI. Nếu người dùng nhập một từ khóa vào thanh tìm kiếm, Google sẽ đưa ra đề xuất về từ tiếp theo có thể là gì.

Ví dụ về TensorFlow
Ví dụ về TensorFlow

Google muốn sử dụng công nghệ máy học để tận dụng bộ dữ liệu khổng lồ của họ nhằm mang đến cho người dùng trải nghiệm tốt nhất. Ba nhóm khác nhau sử dụng học máy:

  • Các nhà nghiên cứu
  • Nhà khoa học dữ liệu
  • Lập trình viên

Tất cả họ đều có thể sử dụng cùng một bộ công cụ để cộng tác với nhau và nâng cao hiệu quả của mình.

Google không chỉ có bất kỳ dữ liệu nào; họ có chiếc máy tính lớn nhất thế giới nên Tensor Flow được xây dựng theo quy mô. TensorFlow là thư viện được Nhóm Google Brain phát triển để tăng tốc quá trình học máy và nghiên cứu mạng lưới thần kinh sâu.

Nó được xây dựng để chạy trên nhiều CPU hoặc GPU và thậm chí cả hệ điều hành di động và nó có một số trình bao bọc bằng nhiều ngôn ngữ như Python, C++ or Java.

Lịch sử của TensorFlow

Một vài năm trước, deep learning bắt đầu vượt trội hơn tất cả các thuật toán machine learning khác khi cung cấp một lượng dữ liệu khổng lồ. Google nhận thấy họ có thể sử dụng các mạng lưới thần kinh sâu này để cải thiện dịch vụ của mình:

  • Gmail
  • Hình chụp
  • Công cụ tìm kiếm của Google

Họ xây dựng một khuôn khổ gọi là Dòng chảy để cho phép các nhà nghiên cứu và nhà phát triển làm việc cùng nhau trên mô hình AI. Sau khi được phát triển và mở rộng quy mô, nó cho phép nhiều người sử dụng nó.

Nó được công bố lần đầu tiên vào cuối năm 2015, trong khi phiên bản ổn định đầu tiên xuất hiện vào năm 2017. Nó là nguồn mở theo giấy phép Nguồn mở Apache. Bạn có thể sử dụng, sửa đổi và phân phối lại phiên bản đã sửa đổi với một khoản phí mà không phải trả bất kỳ khoản nào cho Google.

Tiếp theo trong hướng dẫn học sâu về TensorFlow này, chúng ta sẽ tìm hiểu về kiến ​​trúc TensorFlow và cách thức hoạt động của TensorFlow.

TensorFlow hoạt động như thế nào

TensorFlow cho phép bạn xây dựng các biểu đồ và cấu trúc luồng dữ liệu để xác định cách dữ liệu di chuyển qua biểu đồ bằng cách lấy đầu vào dưới dạng mảng đa chiều được gọi là Tensor. Nó cho phép bạn xây dựng một sơ đồ các hoạt động có thể được thực hiện trên các đầu vào này, ở một đầu và ở đầu kia là đầu ra.

TensorFlow Archikiến trúc

Kiến trúc Tensorflow hoạt động gồm ba phần:

  • Tiền xử lý dữ liệu
  • Xây dựng mô hình
  • Huấn luyện và ước lượng mô hình

Nó được gọi là Tensorflow vì nó lấy đầu vào là một mảng đa chiều, còn được gọi là tenxơ. Bạn có thể xây dựng một loại sơ đồ của các thao tác (được gọi là Biểu đồ) mà bạn muốn thực hiện trên đầu vào đó. Đầu vào đi vào ở một đầu, sau đó nó chảy qua hệ thống gồm nhiều thao tác này và đi ra đầu kia dưới dạng đầu ra.

Đây là lý do tại sao nó được gọi là TensorFlow vì tensor đi vào nó chạy qua một danh sách các thao tác và sau đó nó đi ra phía bên kia.

Tensorflow có thể chạy ở đâu?

Phần cứng TensorFlow và Yêu cầu phần mềm có thể được phân loại thành

Giai đoạn phát triển: Đây là khi bạn huấn luyện chế độ. Việc đào tạo thường được thực hiện trên Máy tính để bàn hoặc máy tính xách tay của bạn.

Giai đoạn chạy hoặc Giai đoạn suy luận: Sau khi đào tạo xong, Tensorflow có thể chạy trên nhiều nền tảng khác nhau. Bạn có thể chạy nó trên

  • Máy tính để bàn đang chạy Windows, macOS hoặc Linux
  • Đám mây như một dịch vụ web
  • Các thiết bị di động như iOS và Android

Bạn có thể huấn luyện nó trên nhiều máy, sau đó bạn có thể chạy nó trên một máy khác khi bạn đã có mô hình được huấn luyện.

Mô hình có thể được đào tạo và sử dụng trên GPU cũng như CPU. GPU ban đầu được thiết kế cho trò chơi điện tử. Vào cuối năm 2010, các nhà nghiên cứu của Stanford phát hiện ra rằng GPU cũng rất giỏi trong các phép toán ma trận và đại số, do đó, nó giúp chúng thực hiện các loại tính toán này rất nhanh. Học sâu dựa vào rất nhiều phép nhân ma trận. TensorFlow rất nhanh trong việc tính toán phép nhân ma trận vì nó được viết bằng C++. Mặc dù nó được triển khai ở C++, TensorFlow có thể được truy cập và kiểm soát bởi các ngôn ngữ khác, Python.

Cuối cùng, một tính năng quan trọng của TensorFlow là TensorBoard. Các TenorBoard cho phép giám sát bằng đồ họa và trực quan những gì TensorFlow đang làm.

Thành phần TensorFlow

máy căng

Tên của Tensorflow được lấy trực tiếp từ framework cốt lõi của nó: máy căng. Trong Tensorflow, tất cả các tính toán đều liên quan đến tensor. Tenxơ là một vector or ma trận có n kích thước đại diện cho tất cả các loại dữ liệu. Tất cả các giá trị trong một tenxơ chứa kiểu dữ liệu giống hệt nhau với một giá trị đã biết (hoặc đã biết một phần) định hình. Hình dạng của dữ liệu là chiều 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 thực hiện bên trong một đồ thị. 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 nút 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 nút. 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 dữ liệu vào thao tác.

Đồ thị

TensorFlow sử dụng khung biểu đồ. Biểu đồ tập hợp và mô tả tất cả các tính toán chuỗi được thực hiện trong quá trình đào tạo. Biểu đồ có rất nhiều ưu điểm:

  • Nó được thực hiện để chạy trên nhiều CPU hoặc GPU và thậm chí cả hệ điều hành di động
  • Tính di động của đồ thị cho phép lưu giữ các phép tính để sử dụng ngay hoặc sau này. Đồ thị có thể được lưu để thực hiện trong tương lai.
  • Tất cả các tính toán trong biểu đồ được thực hiện bằng cách kết nối các tensor với nhau
    • Một tensor có một nút và một cạnh. Nút thực hiện phép toán và tạo ra đầu ra điểm cuối. Các cạnh các cạnh giải thích mối quan hệ đầu vào/đầu ra giữa các nút.

Tại sao TensorFlow lại phổ biến?

TensorFlow là thư viện tốt nhất vì nó được xây dựng để mọi người đều có thể truy cập. Thư viện Tensorflow kết hợp các API khác nhau để xây dựng kiến ​​trúc học sâu ở quy mô lớn như CNN hoặc RNN. TensorFlow dựa trên tính toán đồ thị; nó cho phép nhà phát triển hình dung việc xây dựng mạng nơ-ron bằng Tensorboad. Công cụ này hữu ích để gỡ lỗi chương trình. Cuối cùng, Tensorflow được xây dựng để triển khai ở quy mô lớn. Nó chạy trên CPU và GPU.

Tensorflow thu hút sự phổ biến lớn nhất trên GitHub so với các framework deep learning khác.

TensorFlow Algorithms

Dưới đây là các thuật toán được TensorFlow hỗ trợ:

Hiện tại, TensorFlow 1.10 đã tích hợp API cho:

  • Hồi quy tuyến tính: tf.estimator.LinearRegressor
  • Phân loại:tf.estimator.LinearClassifier
  • Phân loại học sâu: tf.estimator.DNNClassifier
  • Xóa sạch học sâu và sâu: tf.estimator.DNNLinearCombinedClassifier
  • Hồi quy cây tăng cường: tf.estimator.BoostedTreesRegressor
  • Phân loại cây được tăng cường: tf.estimator.BoostedTreesClassifier

Cách tính toán hoạt động trong TensorFlow

import numpy as np
import tensorflow as tf

Trong hai dòng mã đầu tiên, chúng tôi đã nhập tensorflow dưới dạng tf. Với Python, việc sử dụng tên viết tắt cho thư viện là một thông lệ. Ưu điểm là tránh phải gõ đầy đủ tên thư viện khi cần sử dụng. Chẳng hạn, chúng ta có thể nhập tensorflow dưới dạng tf và gọi tf khi chúng ta muốn sử dụng hàm tensorflow

Hãy cùng thực hành quy trình làm việc cơ bản của Tensorflow với các ví dụ TensorFlow đơn giản. Hãy tạo một biểu đồ tính toán nhân hai số với nhau.

Trong ví dụ này, chúng ta sẽ nhân X_1 và X_2 với nhau. Tensorflow sẽ tạo một nút để kết nối hoạt động. Trong ví dụ của chúng tôi, nó được gọi là nhân. Khi đồ thị được xác định, các công cụ tính toán Tensorflow sẽ nhân X_1 và X_2 với nhau.

Tính toán hoạt động trong TensorFlow
Ví dụ về TensorFlow

Cuối cùng, chúng ta sẽ chạy phiên TensorFlow để chạy biểu đồ tính toán với các giá trị X_1 và X_2 rồi in kết quả của phép nhân.

Hãy xác định các nút đầu vào X_1 và X_2. Khi tạo một nút trong Tensorflow, chúng ta phải chọn loại nút sẽ tạo. Các nút X1 và X2 sẽ là nút giữ chỗ. Trình giữ chỗ chỉ định một giá trị mới mỗi lần chúng ta thực hiện phép tính. Chúng tôi sẽ tạo chúng dưới dạng nút giữ chỗ dấu chấm TF.

Bước 1: Xác định biến

X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")

Khi tạo một nút giữ chỗ, chúng ta phải chuyển vào kiểu dữ liệu sẽ cộng số vào đây để có thể sử dụng kiểu dữ liệu dấu phẩy động, hãy sử dụng tf.float32. Chúng ta cũng cần đặt tên cho nút này. Tên này sẽ hiển thị khi chúng ta xem trực quan hóa đồ họa của mô hình của chúng ta. Hãy đặt tên cho nút này là X_1 bằng cách chuyển vào tham số tên có giá trị là X_1 và bây giờ hãy xác định X_2 theo cách tương tự. X_2.

Bước 2: Xác định phép tính

multiply = tf.multiply(X_1, X_2, name = "multiply")

Bây giờ chúng ta có thể xác định nút thực hiện phép nhân. Trong Tensorflow, chúng ta có thể làm điều đó bằng cách tạo nút tf.multiply.

Chúng ta sẽ chuyển các nút X_1 và X_2 sang nút nhân. Nó yêu cầu tensorflow liên kết các nút đó trong biểu đồ tính toán, vì vậy chúng tôi yêu cầu nó lấy các giá trị từ x và y rồi nhân kết quả. Chúng ta cũng hãy đặt tên cho nút nhân là nhân. Đó là toàn bộ định nghĩa cho biểu đồ tính toán đơn giản của chúng tôi.

Bước 3: Thực hiện thao tác

Để thực hiện các thao tác trong biểu đồ, chúng ta phải tạo một phiên. Trong Tensorflow, việc này được thực hiện bởi tf.Session(). Bây giờ chúng ta có một phiên, chúng ta có thể yêu cầu phiên chạy các hoạt động trên biểu đồ tính toán của mình bằng cách gọi session. Để chạy tính toán, chúng ta cần sử dụng run.

Khi thao tác bổ sung chạy, nó sẽ thấy rằng nó cần lấy các giá trị của nút X_1 và X_2, vì vậy chúng ta cũng cần cung cấp các giá trị cho X_1 và X_2. Chúng ta có thể làm điều đó bằng cách cung cấp một tham số có tên là Feed_dict. Chúng tôi chuyển giá trị 1,2,3 cho X_1 và 4,5,6 cho X_2.

Chúng tôi in kết quả bằng print(result). Chúng ta sẽ thấy 4, 10 và 18 cho 1×4, 2×5 và 3×6

X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")

multiply = tf.multiply(X_1, X_2, name = "multiply")

with tf.Session() as session:
    result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]})
    print(result)
[ 4. 10. 18.]

Tùy chọn tải dữ liệu vào TensorFlow

Bước đầu tiên trước khi đào tạo một thuật toán học máy là để tải dữ liệu. Có hai cách phổ biến để tải dữ liệu:

1. Tải dữ liệu vào bộ nhớ: Đây là phương pháp đơn giản nhất. Bạn tải tất cả dữ liệu của mình vào bộ nhớ dưới dạng một mảng. Bạn có thể viết một Python mã số. Dòng mã này không liên quan đến Tensorflow.

2. Đường dẫn dữ liệu Tensorflow: Tensorflow có API tích hợp giúp bạn tải dữ liệu, thực hiện thao tác và cung cấp thuật toán machine learning một cách dễ dàng. Phương pháp này hoạt động rất tốt đặc biệt khi bạn có tập dữ liệu lớn. Ví dụ, các bản ghi hình ảnh được biết là rất lớn và không vừa với bộ nhớ. Đường ống dữ liệu tự quản lý bộ nhớ

Sử dụng giải pháp nào?

Tải dữ liệu vào bộ nhớ

Nếu tập dữ liệu của bạn không quá lớn, tức là dưới 10 gigabyte, bạn có thể sử dụng phương pháp đầu tiên. Dữ liệu có thể vừa với bộ nhớ. Bạn có thể sử dụng thư viện nổi tiếng có tên Pandas để nhập tệp CSV. Bạn sẽ tìm hiểu thêm về gấu trúc trong hướng dẫn tiếp theo.

Tải dữ liệu bằng đường dẫn Tensorflow

Phương pháp thứ hai hoạt động tốt nhất nếu bạn có tập dữ liệu lớn. Chẳng hạn, nếu bạn có tập dữ liệu 50 gigabyte và máy tính của bạn chỉ có 16 gigabyte bộ nhớ thì máy sẽ gặp sự cố.

Trong tình huống này, bạn cần xây dựng một đường dẫn Tensorflow. Đường dẫn sẽ tải dữ liệu theo đợt hoặc từng đoạn nhỏ. Mỗi lô sẽ được đẩy vào đường ống và sẵn sàng cho việc đào tạo. Xây dựng quy trình là một giải pháp tuyệt vời vì nó cho phép bạn sử dụng tính toán song song. Điều đó có nghĩa là Tensorflow sẽ huấn luyện mô hình trên nhiều CPU. Nó thúc đẩy việc tính toán và cho phép đào tạo mạng lưới thần kinh mạnh mẽ.

Bạn sẽ thấy trong các hướng dẫn tiếp theo về cách xây dựng một quy trình quan trọng để cung cấp dữ liệu cho mạng lưới thần kinh của bạn.

Tóm lại, nếu bạn có một tập dữ liệu nhỏ, bạn có thể tải dữ liệu vào bộ nhớ bằng thư viện Pandas.

Nếu bạn có một tập dữ liệu lớn và muốn sử dụng nhiều CPU thì bạn sẽ thoải mái hơn khi làm việc với đường dẫn Tensorflow.

Cách tạo đường ống TensorFlow

Dưới đây là các bước để tạo đường dẫn TensorFlow:

Trong ví dụ trước, chúng tôi đã thêm ba giá trị cho X_1 và X_2 theo cách thủ công. Bây giờ, chúng ta sẽ xem cách tải dữ liệu lên Tensorflow:

Bước 1) Tạo dữ liệu

Trước hết, hãy sử dụng thư viện gọn gàng để tạo hai giá trị ngẫu nhiên.

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

[[0.8835775 0.23766977]]

Bước 2) Tạo trình giữ chỗ

Giống như trong ví dụ trước, chúng ta tạo một trình giữ chỗ có tên X. Chúng ta cần chỉ định rõ ràng hình dạng của tensor. Trong trường hợp, chúng ta sẽ tải một mảng chỉ có hai giá trị. Chúng ta có thể viết hình dạng như shape=[1,2]

# using a placeholder
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')

Bước 3) Xác định phương thức tập dữ liệu

Tiếp theo, chúng ta cần xác định Bộ dữ liệu nơi chúng ta có thể điền giá trị của trình giữ chỗ x. Chúng ta cần sử dụng phương thức tf.data.Dataset.from_tensor_slices

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

Bước 4) Tạo đường ống

Ở bước bốn, chúng ta cần khởi tạo đường dẫn nơi dữ liệu sẽ chảy. Chúng ta cần tạo một iterator với make_initializable_iterator. Chúng tôi đặt tên nó là iterator. Sau đó, chúng ta cần gọi iterator này để cung cấp lô dữ liệu tiếp theo, get_next. Chúng tôi đặt tên bước này là get_next. Lưu ý rằng trong ví dụ của chúng tôi, chỉ có một lô dữ liệu chỉ có hai giá trị.

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

Bước 5) Thực hiện thao tác

Bước cuối cùng tương tự như ví dụ trước. Chúng tôi bắt đầu một phiên và chạy trình vòng lặp hoạt động. Chúng tôi cung cấp cho Feed_dict giá trị được tạo bởi cục mịch. Hai giá trị này sẽ điền vào phần giữ chỗ x. Sau đó chúng ta chạy get_next để in kết quả.

with tf.Session() as sess:
    # feed the placeholder with data
    sess.run(iterator.initializer, feed_dict={ x: x_input }) 
    print(sess.run(get_next)) # output [ 0.52374458  0.71968478]
[0.8835775  0.23766978]

Tổng kết

  • Ý nghĩa của TensorFlow: TensorFlow là thư viện deep learning nổi tiếng nhất trong những năm gần đây. Người thực hành sử dụng TensorFlow có thể xây dựng bất kỳ cấu trúc deep learning nào, như CNN, RNN hoặc mạng nơ-ron nhân tạo đơn giản.
  • TensorFlow chủ yếu được sử dụng bởi các học giả, công ty khởi nghiệp và các công ty lớn. Google sử dụng TensorFlow trong hầu hết các sản phẩm hàng ngày của Google bao gồm Gmail, Photo và Google Search Engine.
  • Nhóm Google Brain đã phát triển TensorFlow để lấp đầy khoảng cách giữa các nhà nghiên cứu và nhà phát triển sản phẩm. Vào năm 2015, họ đã công khai TensorFlow; nó đang phát triển nhanh chóng về mức độ phổ biến. Ngày nay, TensorFlow là thư viện học sâu có nhiều kho lưu trữ nhất trên GitHub.
  • Những người thực hành sử dụng Tensorflow vì nó dễ triển khai trên quy mô lớn. Nó được xây dựng để hoạt động trên đám mây hoặc trên các thiết bị di động như iOs và Android.

Tensorflow hoạt động trong một phiên. Mỗi phiên được xác định bởi một biểu đồ với các phép tính khác nhau. Một ví dụ đơn giản có thể là nhân thành số. Trong Tensorflow, cần có ba bước:

  1. Xác định biến
X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")
  1. Xác định phép tính
multiply = tf.multiply(X_1, X_2, name = "multiply")
  1. Thực hiện thao tác
with tf.Session() as session:
result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]})
print(result)

Một cách phổ biến trong Tensorflow là tạo một đường dẫn để tải dữ liệu. Nếu làm theo năm bước sau, bạn sẽ có thể tải dữ liệu lên TensorFlow:

  1. Tạo dữ liệu
import numpy as np
x_input = np.random.sample((1,2))
print(x_input)
  1. Tạo trình giữ chỗ
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')
  1. Xác định phương pháp tập dữ liệu
dataset = tf.data.Dataset.from_tensor_slices(x)
  1. Tạo đường dẫn
iterator = dataset.make_initializable_iterator() get_next = iterator.get_next()
  1. Thực hiện chương trình
with tf.Session() as sess:  
sess.run(iterator.initializer, feed_dict={ x: x_input })  
print(sess.run(get_next))