คุณมองเห็นสถาปัตยกรรมเครือข่ายประสาทเทียมได้อย่างไร


79

เมื่อเขียนบทความ / นำเสนอเกี่ยวกับหัวข้อที่เกี่ยวกับโครงข่ายประสาทเทียมมักจะแสดงภาพสถาปัตยกรรมเครือข่าย

อะไรคือวิธีที่ดี / ง่ายในการมองเห็นสถาปัตยกรรมทั่วไปโดยอัตโนมัติ




1
ฉันเขียนไดอะแกรมแบบง่าย ๆ ของเครือข่ายประสาทที่ซับซ้อนด้วยการสำรวจวิธีการสร้างภาพข้อมูลการเรียนรู้เชิงลึก (ทั้งแบบแมนนวลและอัตโนมัติ) ฉันได้รับแรงบันดาลใจมากมายและลิงก์จากกระทู้นี้ - ขอบคุณ!
Piotr Migdal

คำตอบ:


25

Tensorflow, Keras, MXNet, PyTorch

หากเครือข่ายประสาทจะได้รับเป็นกราฟ Tensorflow แล้วคุณสามารถเห็นภาพกราฟนี้กับ TensorBoard

นี่คือลักษณะของ MNIST CNN:

ป้อนคำอธิบายรูปภาพที่นี่

คุณสามารถเพิ่มชื่อ / ขอบเขต (เช่น "dropout", "softmax", "fc1", "conv1", "conv2") ด้วยตัวคุณเอง

การตีความ

ต่อไปนี้เป็นเพียงกราฟด้านซ้ายเท่านั้น ฉันไม่สนใจกราฟขนาดเล็ก 4 ตัวที่ครึ่งขวา

แต่ละกล่องเป็นเลเยอร์พร้อมพารามิเตอร์ที่สามารถเรียนรู้ได้ สำหรับการอนุมานข้อมูลจะไหลจากล่างขึ้นบน จุดไข่ปลาเป็นชั้นซึ่งไม่มีพารามิเตอร์ที่เรียนรู้

สีของกล่องไม่มีความหมาย

ฉันไม่แน่ใจเกี่ยวกับมูลค่าของกล่องเล็กประ ("การไล่ระดับสี", "อดัม", "บันทึก")


เป็นเรื่องที่ดีฉันพยายามหลีกเลี่ยงชื่ออย่าง Conv1, Conv2 ฯลฯ ฉันต้องการทำให้ชื่อ Conv ทั้งหมดเป็น CONV ในภายหลังฉันจะทำยังไง ??
Sudip Das

+1 มันไม่เพียง แต่สำหรับ TF เท่านั้น: MXNetและPytorchก็มีส่วนสนับสนุนเช่นกัน
Jakub Bartczuk

@SudipDas คุณสามารถเพิ่มชื่อลงในเลเยอร์ได้ซึ่งจะปรากฏขึ้นเมื่อคุณพล็อต
Ben

ฉันจะแสดงชื่อของแต่ละเลเยอร์เป็น "CONV" ได้อย่างไรถ้าฉันเขียนเป็น "CONV" ของแต่ละเลเยอร์แล้วฉันจะได้รับข้อผิดพลาดทำให้แต่ละเลเยอร์ควรมีชื่อเฉพาะเป็นกฎ tf แต่ฉันอยากรู้คือ มีวิธีอื่นที่จะเอาชนะปัญหานี้หรือไม่? @Ben
Sudip Das

1
@onof ฉันแก้ไขลิงก์
Martin Thoma

22

ฉันเพิ่งสร้างเครื่องมือสำหรับการวาดสถาปัตยกรรม NN และส่งออก SVG ที่เรียกว่าNN-SVG

ป้อนคำอธิบายรูปภาพที่นี่


1
ดาวน์โหลด SVG ไม่ทำงาน
ภาพ

ทำงานให้ฉัน 1/23/19 หากคุณยังคงมีปัญหาโปรดเปิดปัญหา
Alex Lenail

1
นี่เป็นคำตอบเดียวที่ถูกต้อง
ArtificiallyIntelligence

เครื่องมือที่ยอดเยี่ยม อย่างไรก็ตามฉันสังเกตเห็นว่าในสไตล์ AlexNet ขนาดของ Tensors ถูกแสดงอย่างไม่เหมาะสม (ขนาดความกว้างและความสูง)
FlySoFast


11

ฉันจะเพิ่มการสร้างภาพ ASCII โดยใช้keras-sequential-ascii (ข้อจำกัดความรับผิดชอบ: ฉันเป็นผู้เขียน)

เครือข่ายขนาดเล็กสำหรับ CIFAR-10 (จากบทช่วยสอนนี้ ) จะเป็น:

       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

สำหรับ VGG16 มันจะเป็น:

       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

มีโครงการโอเพนซอร์สที่ชื่อว่าNetron

Netron เป็นตัวแสดงสำหรับโครงข่ายประสาทเทียมการเรียนรู้เชิงลึกและโมเดลการเรียนรู้ของเครื่อง

Netron รองรับ ONNX (.onnx, .pb), Keras (.h5, .keras), CoreML (.mlmodel) และ TensorFlow Lite (.tflite) Netron มีการสนับสนุนการทดลองสำหรับ Caffe (.caffemodel), Caffe2 (predict_net.pb), MXNet (-symbol.json), TensorFlow.js (model.json, .pb) และ TensorFlow (.pb, .meta)

ป้อนคำอธิบายรูปภาพที่นี่



8

Keras

โมดูล keras.utils.vis_utilsให้ฟังก์ชั่นยูทิลิตี้พล็อตรูปแบบ Keras (ใช้ Graphviz)

ต่อไปนี้แสดงโมเดลเครือข่ายที่เลเยอร์แรกที่ซ่อนมี 50 เซลล์ประสาทและคาดว่าจะมีตัวแปรอินพุต 104 ตัว

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

ป้อนคำอธิบายรูปภาพที่นี่


ฉันสามารถใช้ในรูปแบบที่เข้ากันได้กับ LaTex หรือไม่
pushpen.paul

8

แพ็คเกจ Python conxสามารถแสดงภาพเครือข่ายด้วยการเปิดใช้งานด้วยฟังก์ชั่นnet.picture()ในการสร้างภาพ SVG, PNG หรือ PIL ดังนี้:

ป้อนคำอธิบายรูปภาพที่นี่

Conx สร้างขึ้นบน Keras และสามารถอ่านได้ในโมเดลของ Keras สามารถเปลี่ยนตารางสีของแต่ละธนาคารและสามารถแสดงประเภทธนาคารทั้งหมดได้

ข้อมูลเพิ่มเติมสามารถดูได้ที่: http://conx.readthedocs.io/en/latest/


6

ฉันกำลังทำงานกับ Visualizer เครือข่ายประสาทแบบลากและวาง (และอื่น ๆ ) นี่คือตัวอย่างของการสร้างภาพสำหรับสถาปัตยกรรมแบบ LeNet การสร้างภาพของสถาปัตยกรรมแบบ LeNet โมเดลที่มีการออกแบบให้มีพัดลมและพัดลมในนั้นก็เป็นแบบจำลองที่ค่อนข้างง่าย คุณสามารถเยี่ยมชมเว็บไซต์ได้ที่https://math.mit.edu/ennui/


เบราว์เซอร์ของฉันยังคงพังเมื่อกด Train
datdinhquoc

1
ขอบคุณสำหรับการตรวจสอบ ใช่ข้อผิดพลาดนี้เพิ่งผุดขึ้นมาเมื่อเร็ว ๆ นี้และดูเหมือนว่าจะเป็นผลมาจากการเปลี่ยนแปลงล่าสุดของ WebGL บน Chrome ทุกอย่างควรทำงานกับ Firefox ฉันจะอัปเดตคุณเมื่อฉันรู้มากขึ้น
เจสซี

tks เครื่องมือสร้างภาพของคุณน่าทึ่งยิ่งกว่าสนามเด็กเล่น tf :)
datdinhquoc

1
ขอขอบคุณ! แจ้งให้เราทราบหากคุณมีปัญหาหรือความคิด เรามีสิ่งที่สนุกสนานเช่นการสร้างรหัสด้วย!
เจสซี

5

ใน R nnetไม่ได้มาพร้อมกับฟังก์ชั่นการพล็อต แต่รหัสสำหรับที่มีให้ที่นี่ที่นี่

อีกวิธีหนึ่งคุณสามารถใช้แพ็คเกจที่ใหม่กว่าและ IMHO ที่ดีกว่าneuralnetซึ่งเรียกว่าคุณสมบัติซึ่งมีplot.neuralnetฟังก์ชั่นดังนั้นคุณสามารถทำได้:

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

neuralnet

neuralnetไม่ได้ใช้มากเท่าที่เป็นnnetเพราะnnetเก่ากว่ามากและมาพร้อมกับ r-cran แต่neuralnetมีอัลกอริธึมการฝึกอบรมมากขึ้นรวมถึงการขยายแบ็กอัพที่ยืดหยุ่นซึ่งขาดแม้กระทั่งในแพ็คเกจเช่น Tensorflow และมีความทนทานต่อตัวเลือกพารามิเตอร์ไฮเปอร์และมีประสิทธิภาพมากกว่าโดยรวม


คุณควรเพิ่มลิงค์ที่อัปเดตสำหรับรหัสของ NNet ใน R beckmw.wordpress.com/2013/11/14/…
wacax

4

มีความพยายามทางเลือกใหม่ในการสร้างภาพเครือข่ายประสาท

โปรดดูบทความเหล่านี้:

'AI brain scan' อันน่าทึ่งเผยให้เห็นเครื่องจักรที่เห็นในขณะที่พวกเขาเรียนรู้ทักษะใหม่ ๆ

ภายในสมอง 'AI' - การเรียนรู้ด้วยเครื่องมีลักษณะอย่างไร

วิธีการเหล่านี้มุ่งเน้นไปที่การมองเห็นการทำงานของโครงข่ายประสาทเทียมมากขึ้นอย่างไรก็ตามสถาปัตยกรรม NN ยังสามารถมองเห็นได้ในแผนภาพผลลัพธ์

ตัวอย่าง:

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่


21
โปรดอธิบายสิ่งที่เราเห็นที่นี่ มันดูสวยงาม แต่ฉันไม่เข้าใจว่าภาพแฟนซีสนับสนุนการทำความเข้าใจการทำงานของเครือข่ายได้อย่างไร
Martin Thoma

ฉันไม่ชอบการใช้คำว่า "ภาพแฟนซี" ที่เสื่อมเสีย @Martin
VividD

9
ฉันไม่ได้ตั้งใจจะโจมตีคุณ แต่คำตอบการป้องกันที่มากเกินไปโดยไม่ตอบคำถามของฉันจริง ๆ - ฉันเพิ่มส่วน "การตีความ" ในแผนภาพ "กล่องเลโก้"
Martin Thoma

1
โดยวิธีการ: ลิงค์ที่สองเสียชีวิต
Martin Thoma

4
@MartinThoma มันเป็นงานศิลปะที่ชัดเจนไม่ใช่ data viz (vide lisacharlotterost.github.io/2015/12/19/ เป็นต้น )
Piotr Migdal

3

ไม่ใช่เรื่องง่ายสำหรับเอกสาร แต่มีประโยชน์มากสำหรับการแสดงคนที่ไม่รู้จักเครือข่ายประสาทเกี่ยวกับสิ่งที่โทโพโลยีของพวกเขาอาจมีลักษณะอย่างไร ไลบรารี Javascriptนี้(Neataptic)ให้คุณเห็นภาพเครือข่ายของคุณ:

ป้อนคำอธิบายรูปภาพที่นี่


3

คุณสามารถอ่านเอกสารที่เป็นที่นิยมการทำความเข้าใจกับโครงข่ายประสาทผ่านการสร้างภาพข้อมูลลึกซึ่งกล่าวถึงการสร้างภาพข้อมูลของอวนเชิงซ้อน การใช้งานไม่เพียงแสดงแต่ละชั้น แต่ยังแสดงให้เห็นถึงการเปิดใช้งาน, น้ำหนัก, deconvolutions และสิ่งอื่น ๆ อีกมากมายที่มีการกล่าวถึงอย่างลึกซึ้งในกระดาษ มันเป็นรหัสที่caffe'มา ส่วนที่น่าสนใจคือคุณสามารถแทนที่โมเดลที่ได้รับการฝึกฝนมาเป็นของคุณเอง


2

Tensorspace-JS เป็นเครื่องมือที่ยอดเยี่ยมสำหรับการสร้างภาพ 3 มิติของสถาปัตยกรรมเครือข่าย:

ป้อนคำอธิบายรูปภาพที่นี่

https://tensorspace.org/

และนี่คือโพสต์ที่ดีเกี่ยวกับวิธีการเขียนโปรแกรม:

https://medium.freecodecamp.org/tensorspace-js-a-way-to-3d-visualize-neural-networks-in-browsers-2c0afd7648a8


คุณสามารถให้ลิงค์ไปยังเครื่องมือนี้ได้หรือไม่?
Piotr Migdal

1
@PiotrMigdal ฉันอัพเดตคำตอบแล้ว
Ali Mirzaei

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.