Trong bài học này, chúng ta sẽ xem xét cách tạo và trực quan hóa một biểu đồ bằng TensorBoard. Chúng ta đã xem qua TensorBoard trong bài học đầu tiên về các biến
Vậy TensorBoard là gì và tại sao chúng ta muốn sử dụng nó?
TensorBoard là một bộ ứng dụng web để kiểm tra và hiểu các lần chạy và đồ thị TensorFlow của bạn. TensorBoard hiện hỗ trợ năm hình ảnh trực quan: vô hướng, hình ảnh, âm thanh, biểu đồ và đồ thị. Các phép tính bạn sẽ sử dụng trong TensorFlow cho những việc như đào tạo một mạng nơron sâu khổng lồ, có thể khá phức tạp và khó hiểu, TensorBoard sẽ làm cho việc này trở nên dễ hiểu hơn, gỡ lỗi và tối ưu hóa các chương trình TensorFlow của bạn.
Các bài viết liên quan:
Đây là biểu đồ TensorBoard trông như thế nào:
Tập lệnh cơ bản
Dưới đây chúng tôi có tập lệnh cơ bản để xây dựng biểu đồ TensorBoard. Ngay bây giờ, tất cả điều này sẽ trở lại nếu bạn chạy nó trong trình thông dịch python, là 63.
import tensorflow as tf a = tf.add(1, 2,) b = tf.multiply(a, 3) c = tf.add(4, 5,) d = tf.multiply(c, 6,) e = tf.multiply(4, 5,) f = tf.div(c, 6,) g = tf.add(b, d) h = tf.multiply(g, f) with tf.Session() as sess: print(sess.run(h))
Bây giờ chúng ta thêm một SummaryWriter vào cuối mã của chúng tôi, điều này sẽ tạo một thư mục trong thư mục nhất định của bạn, Thư mục này sẽ chứa thông tin để TensorBoard xây dựng biểu đồ.
with tf.Session() as sess: writer = tf.summary.FileWriter("output", sess.graph) print(sess.run(h)) writer.close()
Nếu bạn đang chạy TensorBoard ngay bây giờ, với thư mục tensorboard –logdir = path / to / logs /, bạn sẽ thấy rằng trong thư mục nhất định của bạn, bạn nhận được một thư mục có tên là “output”. Nếu bạn điều hướng đến địa chỉ ip trong thiết bị đầu cuối của mình, Nó sẽ đưa bạn đến TensorBoard của bạn, Sau đó, nếu bạn nhấp vào biểu đồ, bạn sẽ thấy biểu đồ của mình.
Tại thời điểm này, biểu đồ ở khắp mọi nơi và khá khó đọc. Vì vậy, hãy đặt tên cho một số phần để làm cho nó dễ đọc hơn.
Thêm tên
Trong đoạn mã dưới đây, chúng tôi chỉ thêm một tham số vào một vài lần. tên = [cái gì đó]. Tham số này sẽ lấy khu vực đã chọn và đặt tên cho nó trên đồ thị.
a = tf.add(1, 2, name="Add_these_numbers") b = tf.multiply(a, 3) c = tf.add(4, 5, name="And_These_ones") d = tf.multiply(c, 6, name="Multiply_these_numbers") e = tf.multiply(4, 5, name="B_add") f = tf.div(c, 6, name="B_mul") g = tf.add(b, d) h = tf.multiply(g, f)
Bây giờ nếu bạn chạy lại tệp python của mình và sau đó chạy lại thư mục tensorboard –logdir = path / to / logs /, bây giờ bạn sẽ thấy rằng biểu đồ của bạn có một số tên trên các phần cụ thể mà bạn đã đặt tên. Tuy nhiên, nó vẫn rất lộn xộn và nếu đây là một mạng nơ-ron khổng lồ, nó sẽ gần như không thể đọc được.
Tạo scopes
Nếu chúng ta đặt tên cho đồ thị bằng cách nhập tf.name_scope (“MyOperationGroup”): và đặt cho đồ thị một phạm vi như thế này với tf.name_scope (“Scope_A”):. khi bạn chạy lại TensorBoard của mình, bạn sẽ thấy một cái gì đó rất khác. Biểu đồ giờ đây dễ đọc hơn nhiều và bạn có thể thấy rằng tất cả đều nằm dưới tiêu đề biểu đồ, Trong trường hợp này là MyOperationGroup, và sau đó bạn có phạm vi A và B của mình, có phạm vi hoạt động bên trong chúng.
#Here we are defining the name of the graph, scopes A, B and C. with tf.name_scope("MyOperationGroup"): with tf.name_scope("Scope_A"): a = tf.add(1, 2, name="Add_these_numbers") b = tf.multiply(a, 3) with tf.name_scope("Scope_B"): c = tf.add(4, 5, name="And_These_ones") d = tf.multiply(c, 6, name="Multiply_these_numbers") with tf.name_scope("Scope_C"): e = tf.multiply(4, 5, name="B_add") f = tf.div(c, 6, name="B_mul") g = tf.add(b, d) h = tf.multiply(g, f)
Như bạn có thể thấy, biểu đồ giờ đây dễ đọc hơn rất nhiều.
TensorBoard có một loạt các tính năng, một số tính năng trong số đó chúng tôi sẽ đề cập đến trong các bài học trong tương lai. Nếu bạn muốn tìm hiểu sâu hơn, hãy bắt đầu bằng cách xem video này từ Hội nghị các nhà phát triển TensorFlow 2017.
Trong bài học này, chúng ta đã xem xét:
- Bố cục cơ bản cho biểu đồ TensorBoard
- Thêm trình viết Tóm tắt để xây dựng TensorBoard
- Thêm tên vào biểu đồ TensorBoard
- Thêm tên và phạm vi vào TensorBoard
Có một công cụ tuyệt vời của bên thứ 3 được gọi là TensorDebugger (TDB), TBD giống như cách nói của nó là một trình gỡ lỗi. Nhưng không giống như các trình gỡ lỗi tiêu chuẩn được tích hợp trong TensorBoard, TBD giao tiếp trực tiếp với việc thực thi đồ thị TensorFlow và cho phép thực hiện từng nút một. Trong đó trình gỡ lỗi TensorBoard tiêu chuẩn không thể được sử dụng đồng thời với việc chạy biểu đồ TensorFlow và các tệp nhật ký phải được ghi trước.
import tensorflow as tf import numpy as np # x and y are placeholders for our training data x = tf.placeholder("float") y = tf.placeholder("float") # w is the variable storing our values. It is initialised with starting "guesses" # w[0] is the "a" in our equation, w[1] is the "b" w = tf.Variable([1.0, 2.0], name="w") # Our model of y = a*x + b y_model = tf.multiply(x, w[0]) + w[1] # Our error is defined as the square of the differences error = tf.square(y - y_model) # The Gradient Descent Optimizer does the heavy lifting train_op = tf.train.GradientDescentOptimizer(0.01).minimize(error) # Normal TensorFlow - initialize values, create a session and run the model model = tf.global_variables_initializer() with tf.Session() as session: session.run(model) for i in range(1000): x_value = np.random.rand() y_value = x_value * 2 + 6 session.run(train_op, feed_dict={x: x_value, y: y_value}) w_value = session.run(w) print("Predicted model: {a:.3f}x + {b:.3f}".format(a=w_value[0], b=w_value[1]))
Các biểu tượng đặc biệt này được sử dụng cho các hằng số và các nút tóm tắt.