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

Mục lục:

Anonim

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 mã nguồn mở để tạo các ứng dụng Học máy. Nó là một thư viện toán học biểu tượng sử dụng luồng dữ liệu và lập trình có thể phân biệt để thực hiện các nhiệm vụ khác nhau tập trung vào đào tạo và suy luận các mạng nơ-ron 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 cách sử dụng các công cụ, thư viện và tài nguyên cộng đồng khác nhau.

Hiện tại, thư viện học sâu nổi tiếng nhất trên 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 các đề xuất.

Để đưa ra một ví dụ cụ thể, người dùng Google có thể 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 từ khóa vào thanh tìm kiếm, Google sẽ đưa ra đề xuất về từ tiếp theo có thể là từ khóa nào.

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 máy học:

  • Các nhà nghiên cứu
  • Các 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 họ.

Google không chỉ có bất kỳ dữ liệu nào; họ có máy tính lớn nhất thế giới, vì vậy Tensor Flow đã được xây dựng để mở rộng quy mô. TensorFlow là một thư viện do Nhóm Google Brain phát triển để tăng tốc học máy và nghiên cứu mạng 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 một số ngôn ngữ như Python, C ++ hoặc Java.

Trong hướng dẫn TensorFlow này, bạn sẽ học

  • TensorFlow là gì?
  • Lịch sử của TensorFlow
  • Cách hoạt động của TensorFlow
  • Kiến trúc TensorFlow
  • Tensorflow có thể chạy ở đâu?
  • Giới thiệu về các thành phần của TensorFlow
  • Tại sao TensorFlow lại phổ biến?
  • Danh sách các thuật toán nổi bật được hỗ trợ bởi TensorFlow
  • Ví dụ về TensorFlow đơn giản
  • Các tùy chọn để tải dữ liệu vào TensorFlow
  • Tạo đường ống Tensorflow

Lịch sử của TensorFlow

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

  • Gmail
  • tấm ảnh
  • Công cụ tìm kiếm của Google

Họ xây dựng một khuôn khổ có tên là Tensorflow để 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ột mô hình AI. Sau khi được phát triển và mở rộng, nó cho phép rất nhiều người sử dụng.

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à mã nguồn mở theo giấy phép Nguồn mở Apache. Bạn có thể sử dụng nó, sửa đổi nó 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 cứ thứ gì 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.

Cách hoạt động của TensorFlow

TensorFlow cho phép bạn xây dựng 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 là một 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, đi ở một đầu và đến ở đầu kia là đầu ra.

Kiến trúc TensorFlow

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

  • Xử lý trước dữ liệu
  • Xây dựng mô hình
  • Đào tạo và ước tính mô hình

Nó được gọi là Tensorflow vì nó nhận đầu vào là một mảng đa chiều, còn được gọi là tensors . Bạn có thể xây dựng một loại lưu đồ hoạt động (được gọi là Đồ thị) mà bạn muốn thực hiện trên đầu vào đó. Đầu vào đi vào một đầu, và sau đó nó chảy qua hệ thống gồm nhiều hoạt động 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 bởi vì tensor đi trong nó chảy qua một danh sách các hoạt động, và sau đó nó đi ra phía bên kia.

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

TensorFlow yêu cầu phần cứng và 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 đào tạo 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ể được 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 chạy Windows, macOS hoặc Linux
  • Đám mây dưới dạng dịch vụ web
  • Các thiết bị di động như iOS và Android

Bạn có thể đào tạo 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 đào tạo.

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 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 trên rất nhiều phép nhân ma trận. TensorFlow tính toán phép nhân ma trận rất nhanh vì nó được viết bằng C ++. Mặc dù nó được triển khai bằng C ++, nhưng TensorFlow có thể được truy cập và điều khiển bởi các ngôn ngữ khác chủ yếu là Python.

Cuối cùng, một tính năng quan trọng của TensorFlow là TensorBoard. TensorBoard cho phép theo dõi đồ họa và trực quan những gì TensorFlow đang làm.

Giới thiệu về các thành phần của TensorFlow

Tensor

Tên của Tensorflow có nguồn gốc trực tiếp từ khung cốt lõi của nó: 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 một tensor giữ kiểu dữ liệu giống hệt với một (còn gọi hoặc một phần) được biết đến hình dạng . 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 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 hoạt động với dữ liệu.

Đồ thị

TensorFlow sử dụng khung đồ thị. Biểu đồ tập hợp và mô tả tất cả các phép tính 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 duy trì các tính toán để sử dụng ngay lập tức hoặc sau này. Biểu đồ có thể được lưu lại để 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 tenxơ với nhau
    • Một tenxơ có một nút và một cạnh. Nút thực hiện phép toán và tạo ra kết quả đầu cuối. Các cạnh Các cạnh giải thích các 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 có thể truy cập được. 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 trực quan hóa việc xây dựng mạng nơ-ron với Tensorboad. Công cụ này rất hữu ích để gỡ lỗi chương trình. Cuối cùng, Tensorflow được xây dựng để triển khai trên 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 khung học sâu khác.

Danh sách các thuật toán nổi bật được hỗ trợ bởi TensorFlow

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

Hiện tại, TensorFlow 1.10 có một API tích hợp 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
  • Deep learning wipe and deep: tf.estimator.DNNLinearCombinedClassifier
  • Hồi quy cây tăng cường: tf.estimator.BoostedTreesRegressor
  • Phân loại cây tăng cường: tf.estimator.BoostedTreesClassifier

Ví dụ về TensorFlow đơn giản

import numpy as npimport tensorflow as tf

Trong hai dòng mã đầu tiên, chúng ta đã 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ói quen phổ biến. Ưu điểm là tránh phải gõ tên đầy đủ của thư viện khi chúng ta cần sử dụng. Ví dụ: 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 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 đồ thị 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.

Ví dụ về TensorFlow

Cuối cùng, chúng tôi sẽ chạy một phiên TensorFlow sẽ chạy biểu đồ tính toán với các giá trị của X_1 và X_2 và 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 chúng ta tạo một nút trong Tensorflow, chúng ta phải chọn loại nút để tạo. Các nút X1 và X2 sẽ là một nút giữ chỗ. Trình giữ chỗ chỉ định một giá trị mới mỗi khi chúng tôi thực hiện một phép tính. Chúng tôi sẽ tạo chúng dưới dạng nút giữ chỗ 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 chúng ta tạo một nút giữ chỗ, chúng ta phải chuyển vào kiểu dữ liệu sẽ thêm số vào đây để chúng ta 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 nhìn vào hình ảnh đồ 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 một tham số được gọi là tên với giá trị là X_1 và bây giờ hãy xác định X_2 theo cùng một cách. X_2.

Bước 2: Xác định tính toán

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 một nút tf.multiply.

Chúng tôi sẽ chuyển các nút X_1 và X_2 vào nút nhân. Nó yêu cầu tensorflow liên kết các nút đó trong đồ thị tính toán, vì vậy chúng tôi yêu cầu nó kéo các giá trị từ x và y và nhân kết quả. Hãy cũng đặt tên cho nút nhân. Nó là toàn bộ định nghĩa cho đồ thị 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 hoạt động trong biểu đồ, chúng ta phải tạo một phiên. Trong Tensorflow, nó đượ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 đồ thị tính toán của chúng ta bằng cách gọi phiên. Để chạy tính toán, chúng ta cần sử dụng run.

Khi thao tác cộng chạy chạy, sẽ thấy rằng nó cần lấy các giá trị của các nút X_1 và X_2, vì vậy chúng tôi 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 gọi 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 (kết quả). Chúng ta sẽ thấy 4, 10 và 18 cho 1x4, 2x5 và 3x6

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.]

Các 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. Nạp dữ liệu vào bộ nhớ: 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 duy nhất. Bạn có thể viết mã Python. Dòng mã này không liên quan đến Tensorflow.

2. Đường ố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 hoạt động và cung cấp thuật toán học máy 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ó một 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 phù hợp với bộ nhớ. Đường ống dữ liệu tự quản lý bộ nhớ

Giải pháp nào để sử dụng?

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 là 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 với đường ống Tensorflow

Phương pháp thứ hai hoạt động tốt nhất nếu bạn có một tập dữ liệu lớn. Ví dụ: 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 phải xây dựng một đường ống Tensorflow. Đường ống sẽ tải dữ liệu theo lô hoặc từng đoạn nhỏ. Mỗi lô sẽ được đẩy lên đường ống và sẵn sàng cho quá trình đào tạo. Xây dựng đường ống 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. Nó có nghĩa là Tensorflow sẽ đào tạo mô hình trên nhiều CPU. Nó hỗ trợ tính toán và cho phép đào tạo mạng nơ-ron 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 đường ống quan trọng để cung cấp cho mạng nơ-ron 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à bạn muốn sử dụng nhiều CPU, thì bạn sẽ thấy thoải mái hơn khi làm việc với đường ống Tensorflow.

Tạo đường ống 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 vào Tensorflow.

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

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

import numpy as npx_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ỗ với tên X. Chúng ta cần chỉ định hình dạng của tensor một cách rõ ràng. Trong trường hợp, chúng tôi sẽ tải một mảng chỉ có hai giá trị. Chúng ta có thể viết hình dạng là shape = [1,2]

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

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

tiếp theo, chúng ta cần xác định Dataset nơi chúng ta có thể điền giá trị của placeholder 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 dẫn

Trong bước bốn, chúng ta cần khởi tạo đường ống mà dữ liệu sẽ chảy qua. Chúng ta cần tạo một trình lặp với make_initializable_iterator. Chúng tôi đặt tên nó là trình lặp. Sau đó, chúng ta cần gọi trình lặp này để cung cấp cho lô dữ liệu tiếp theo, get_next. Chúng tôi đặt tên cho 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 hoạt động

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úng tôi chạy trình lặp hoạt động. Chúng tôi cung cấp feed_dict với giá trị được tạo bởi numpy. Hai giá trị này sẽ điền vào trình giữ chỗ x. Sau đó, chúng tôi chạy get_next để in kết quả.

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

Tóm lược

Ý nghĩa của TensorFlow: TensorFlow là thư viện học sâu nổi tiếng nhất những năm gần đây. Một học viên sử dụng TensorFlow có thể xây dựng bất kỳ cấu trúc học sâu 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 nhanh chóng trở nên phổ biến. Hiện nay, TensorFlow là thư viện học sâu có nhiều kho nhất trên GitHub.

Các học viên sử dụng Tensorflow vì nó dễ dàng 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 với số. Trong Tensorflow, ba bước được yêu cầu:

  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 hoạt động
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 thực tế phổ biến trong Tensorflow là tạo một đường dẫn để tải dữ liệu. Nếu bạn làm theo năm bước sau, bạn sẽ có thể tải dữ liệu vào TensorFLow

  1. Tạo dữ liệu
import numpy as npx_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 ống
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))