Làm thế nào để bạn hình dung kiến ​​trúc mạng thần kinh?


79

Khi viết một bài báo / thuyết trình về một chủ đề liên quan đến mạng lưới thần kinh, người ta thường hình dung kiến ​​trúc mạng.

Những cách tốt / đơn giản để tự động hình dung các kiến ​​trúc phổ biến là gì?




1
Tôi đã viết các sơ đồ đơn giản về các mạng thần kinh phức tạp với một cuộc khảo sát về các phương pháp trực quan học tập sâu (cả thủ công và tự động). Tôi đã có rất nhiều cảm hứng, và các liên kết, từ chủ đề này - thx!
Piotr Migdal

Câu trả lời:


25

Dòng chảy, Máy ảnh, MXNet, PyTorch

Nếu mạng nơ ron được đưa ra dưới dạng biểu đồ Tensorflow, thì bạn có thể hình dung biểu đồ này bằng TensorBoard .

Đây là cách CNN của MNIST trông như thế nào:

nhập mô tả hình ảnh ở đây

Bạn có thể tự thêm tên / phạm vi (như "bỏ học", "softmax", "fc1", "conv1", "conv2").

Diễn dịch

Sau đây chỉ là về đồ thị bên trái. Tôi bỏ qua 4 biểu đồ nhỏ ở nửa bên phải.

Mỗi hộp là một lớp với các tham số có thể học được. Đối với suy luận, thông tin chảy từ dưới lên trên. Dấu chấm lửng là các lớp không chứa các tham số đã học.

Màu sắc của các hộp không có ý nghĩa.

Tôi không chắc chắn về giá trị của các hộp nhỏ nét đứt ("độ dốc", "Adam", "lưu").


thật tốt, tôi đang cố gắng tránh những cái tên như conv1, conv2, v.v., tôi muốn đặt tất cả tên của ver sau này là CONV, tôi sẽ làm thế nào ??
Sudip Das

+1. Mặc dù vậy, nó không chỉ dành cho TF: MXNetPytorch cũng có một số hỗ trợ
Jakub Bartczuk

@SudipDas Bạn có thể thêm tên trong mã vào các lớp, nó sẽ hiển thị khi bạn vẽ nó.
Ben

Làm thế nào tôi sẽ hiển thị tên của mỗi lớp là "CONV", nếu tôi viết nó là "CONV" của mỗi lớp thì tôi sẽ gặp lỗi, vì mỗi lớp nên có một tên duy nhất là quy tắc tf, NHƯNG tôi muốn biết, là Có cách nào khác để khắc phục vấn đề này không ?? @Ben
Sudip Das

1
@onof Tôi đã sửa liên kết
Martin Thoma

23

Gần đây tôi đã tạo ra một công cụ để vẽ kiến ​​trúc NN và xuất SVG, được gọi là NN-SVG

nhập mô tả hình ảnh ở đây


1
Tải xuống SVG không hoạt động
hình ảnh

làm việc cho tôi 1/23/19. Nếu bạn vẫn gặp sự cố, vui lòng mở một sự cố.
Alex Lenail

1
đây là câu trả lời đúng duy nhất
Nhân tạo thông minh

công cụ tuyệt vời. Tuy nhiên, tôi nhận thấy rằng trong phong cách AlexNet, kích thước của các Tenor bị thể hiện nhầm (kích thước chiều rộng và chiều cao)
FlySoFast


11

Tôi sẽ thêm trực quan hóa ASCII bằng cách sử dụng keras-sequential-ascii (từ chối trách nhiệm: Tôi là tác giả).

Một mạng nhỏ cho CIFAR-10 (từ hướng dẫn này ) sẽ là:

       OPERATION           DATA DIMENSIONS   WEIGHTS(N)   WEIGHTS(%)

           Input   #####     32   32    3
          Conv2D    \|/  -------------------       896     2.1%
            relu   #####     30   30   32
    MaxPooling2D   Y max -------------------         0     0.0%
                   #####     15   15   32
          Conv2D    \|/  -------------------     18496    43.6%
            relu   #####     13   13   64
    MaxPooling2D   Y max -------------------         0     0.0%
                   #####      6    6   64
         Flatten   ||||| -------------------         0     0.0%
                   #####        2304
           Dense   XXXXX -------------------     23050    54.3%
         softmax   #####          10

Đối với VGG16, nó sẽ là:

       OPERATION           DATA DIMENSIONS   WEIGHTS(N)   WEIGHTS(%)

          Input   #####      3  224  224
     InputLayer     |   -------------------         0     0.0%
                  #####      3  224  224
  Convolution2D    \|/  -------------------      1792     0.0%
           relu   #####     64  224  224
  Convolution2D    \|/  -------------------     36928     0.0%
           relu   #####     64  224  224
   MaxPooling2D   Y max -------------------         0     0.0%
                  #####     64  112  112
  Convolution2D    \|/  -------------------     73856     0.1%
           relu   #####    128  112  112
  Convolution2D    \|/  -------------------    147584     0.1%
           relu   #####    128  112  112
   MaxPooling2D   Y max -------------------         0     0.0%
                  #####    128   56   56
  Convolution2D    \|/  -------------------    295168     0.2%
           relu   #####    256   56   56
  Convolution2D    \|/  -------------------    590080     0.4%
           relu   #####    256   56   56
  Convolution2D    \|/  -------------------    590080     0.4%
           relu   #####    256   56   56
   MaxPooling2D   Y max -------------------         0     0.0%
                  #####    256   28   28
  Convolution2D    \|/  -------------------   1180160     0.9%
           relu   #####    512   28   28
  Convolution2D    \|/  -------------------   2359808     1.7%
           relu   #####    512   28   28
  Convolution2D    \|/  -------------------   2359808     1.7%
           relu   #####    512   28   28
   MaxPooling2D   Y max -------------------         0     0.0%
                  #####    512   14   14
  Convolution2D    \|/  -------------------   2359808     1.7%
           relu   #####    512   14   14
  Convolution2D    \|/  -------------------   2359808     1.7%
           relu   #####    512   14   14
  Convolution2D    \|/  -------------------   2359808     1.7%
           relu   #####    512   14   14
   MaxPooling2D   Y max -------------------         0     0.0%
                  #####    512    7    7
        Flatten   ||||| -------------------         0     0.0%
                  #####       25088
          Dense   XXXXX ------------------- 102764544    74.3%
           relu   #####        4096
          Dense   XXXXX -------------------  16781312    12.1%
           relu   #####        4096
          Dense   XXXXX -------------------   4097000     3.0%
        softmax   #####        1000

11

Có một dự án nguồn mở được gọi là Netron

Netron là một người xem cho mạng lưới thần kinh, mô hình học tập sâu và máy học.

Netron hỗ trợ ONNX (.onnx, .pb), Keras (.h5, .keras), CoreML (.mlmodel) và TensorFlow Lite (.tflite). Netron có hỗ trợ thử nghiệm cho Caffe (.caffemodel), Caffe2 (dự đoán_net.pb), MXNet (-symbol.json), TensorFlow.js (model.json, .pb) và TensorFlow (.pb, .meta).

nhập mô tả hình ảnh ở đây



8

Máy ảnh

Các mô-đun keras.utils.vis_utils cung cấp các chức năng tiện ích để vẽ một (graphviz sử dụng) mô hình Keras

Dưới đây cho thấy một mô hình mạng rằng lớp ẩn đầu tiên có 50 nơ-ron và mong đợi 104 biến đầu vào.

plot_model(model, to_file='model.png', show_shapes=True, show_layer_names=True)

nhập mô tả hình ảnh ở đây


Tôi có thể sử dụng nó ở định dạng tương thích LaTex không?
Pushpen.paul

8

Gói Python conxcó thể trực quan hóa các mạng với kích hoạt với chức năng net.picture()tạo ra SVG, PNG hoặc PIL Hình ảnh như thế này:

nhập mô tả hình ảnh ở đây

Conx được xây dựng trên Keras và có thể đọc trong các mô hình của Keras. Colormap tại mỗi ngân hàng có thể được thay đổi và nó có thể hiển thị tất cả các loại ngân hàng.

Thông tin chi tiết có thể được tìm thấy tại: http://conx.readthedocs.io/en/latest/


6

Tôi đã làm việc trên một trình hiển thị mạng thần kinh kéo và thả (và hơn thế nữa). Đây là một ví dụ về trực quan hóa cho một kiến ​​trúc giống như LeNet. Hình dung về kiến ​​trúc giống như LeNet Các mô hình với fan-out và fan-in cũng được mô hình hóa khá dễ dàng. Bạn có thể truy cập trang web tại https://math.mit.edu/ennui/


trình duyệt của tôi liên tục gặp sự cố khi nhấn Train
datdinhquoc

1
Cảm ơn vì đã kiểm tra nó. Có, lỗi này vừa xuất hiện gần đây và dường như là kết quả của một số thay đổi gần đây đối với WebGL trên Chrome. Mọi thứ nên hoạt động trên Firefox. Tôi sẽ cập nhật cho bạn khi tôi biết nhiều hơn.
Jesse

tks, trình hiển thị của bạn thật tuyệt vời, trông tuyệt vời hơn sân chơi tf :)
datdinhquoc

1
Cảm ơn bạn! Hãy cho tôi biết nếu bạn có vấn đề hoặc ý tưởng. Chúng tôi có những điều thú vị như tạo mã quá!
Jesse

5

Trong R, nnetkhông đi kèm với chức năng cốt truyện, nhưng mã cho điều đó được cung cấp ở đây .

Ngoài ra, bạn có thể sử dụng gói tốt hơn gần đây và IMHO được gọi là neuralnetcó tính plot.neuralnetnăng, vì vậy bạn chỉ có thể thực hiện:

data(infert, package="datasets")
plot(neuralnet(case~parity+induced+spontaneous, infert))

mạng lưới thần kinh

neuralnetkhông được sử dụng càng nhiều càng tốt nnetnnetlà lớn tuổi hơn và được vận chuyển với r-cran. Nhưng neuralnetcó nhiều thuật toán đào tạo hơn, bao gồm cả backpropagationkhả năng hồi phục , thậm chí còn thiếu trong các gói như Tensorflow, và mạnh mẽ hơn nhiều đối với các lựa chọn siêu tham số, và có nhiều tính năng tổng thể hơn.


Bạn nên thêm liên kết được cập nhật cho mã của NNet trong R beckmw.wordpress.com/2013/11/14/iêu
wacax

4

Có một số nỗ lực thay thế mới lạ về trực quan hóa mạng lưới thần kinh.

Xin vui lòng xem các bài viết sau:

Tuyệt vời 'Quét não AI' tiết lộ những gì máy móc nhìn thấy khi chúng học các kỹ năng mới

Bên trong một 'bộ não' AI - Học máy trông như thế nào?

Các phương pháp này được định hướng nhiều hơn theo hướng trực quan hóa hoạt động của mạng thần kinh, tuy nhiên, kiến ​​trúc NN cũng phần nào hiển thị trên các sơ đồ kết quả.

Ví dụ:

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây


21
Hãy giải thích những gì chúng ta thấy ở đây. Nó trông đẹp, nhưng tôi không hiểu làm thế nào các hình ảnh ưa thích hỗ trợ hiểu hoạt động của mạng.
Martin Thoma

Tôi không thích cách sử dụng "hình ảnh ưa thích" xúc phạm của bạn. @Martin
VividD 27/03/18

9
Tôi không có ý tấn công bạn, nhưng câu trả lời phòng thủ quá mức của bạn mà không thực sự trả lời câu hỏi của tôi nói lên điều đó. - Tôi đã thêm một phần "diễn giải" vào sơ đồ "hộp lego".
Martin Thoma

1
Nhân tiện: Liên kết thứ hai đã chết.
Martin Thoma

4
@MartinThoma Đó là nghệ thuật dữ liệu rõ ràng, không phải dữ liệu viz (vide lisacharlotterost.github.io/2015/12/19/ mẹo ).
Piotr Migdal

3

Không phải tiện lợi cho các bài báo, nhưng rất hữu ích để hiển thị cho những người không biết nhiều về mạng lưới thần kinh, cấu trúc liên kết của họ có thể trông như thế nào. Thư viện Javascript này (Neataptic) cho phép bạn hình dung mạng của mình:

nhập mô tả hình ảnh ở đây


3

Bạn có thể đọc bài báo phổ biến Tìm hiểu về Mạng nơ-ron thông qua Trực quan hóa sâu , thảo luận về trực quan hóa các mạng chập. Việc thực hiện của nó không chỉ hiển thị từng lớp mà còn mô tả các kích hoạt, trọng lượng, giải mã và nhiều thứ khác được thảo luận sâu trong bài báo. Đó là mã caffe'. Phần thú vị là bạn có thể thay thế mô hình được đào tạo trước bằng mô hình của riêng bạn.



Licensed under cc by-sa 3.0 with attribution required.