วิธีการแสดงภาพสถาปัตยกรรมโครงข่ายประสาทเทียมใน Python

คำแนะนำฉบับย่อในการสร้างการนำเสนอแบบไดอะแกรมของโครงข่ายประสาทเทียมของคุณโดยใช้ Jupyter หรือ Google Colab

เครดิตรูปภาพ - พัฒนาโดยผู้เขียนโดยใช้ Visualkeras และ Jupyter Notebook

บ่อยครั้งในขณะที่ทำงานกับโครงข่ายประสาทเทียมหรือรูปแบบอื่นๆ เช่น โครงข่ายประสาทเทียมแบบ Convolution หรือโครงข่ายประสาทที่เกิดซ้ำ เราต้องการแสดงภาพและสร้างการนำเสนอแบบไดอะแกรมของแบบจำลองที่คอมไพล์ของเรา วิธีนี้สามารถแก้ไขวัตถุประสงค์ได้ 2 ประการ:

  1. ในขณะที่การกำหนดและการฝึกอบรมโมเดลหลายรายการช่วยให้เราเห็นภาพความลึกของโมเดลของเรา และเปรียบเทียบเลเยอร์ต่างๆ และวิธีการจัดวางตามลำดับ
  2. ช่วยให้เข้าใจโครงสร้างของแบบจำลอง ฟังก์ชั่นการเปิดใช้งานที่ใช้ในแต่ละเลเยอร์ รูปร่างของแต่ละเลเยอร์ (จำนวนเซลล์ประสาท) และพารามิเตอร์ที่ต้องฝึกฝนได้ดีขึ้น

มีแพ็คเกจไม่กี่แพ็คเกจใน python ที่สามารถสร้างการแสดงภาพของโมเดลโครงข่ายประสาทเทียมของเราได้ สามแพ็คเกจแรกสามารถใช้ได้ก่อนที่โมเดลจะได้รับการฝึก (จำเป็นต้องกำหนดและคอมไพล์โมเดลเท่านั้น) อย่างไรก็ตาม Tensor Boards กำหนดให้ผู้ใช้ฝึกโมเดลเกี่ยวกับข้อมูลที่แม่นยำก่อนจึงจะมองเห็นสถาปัตยกรรมได้

  1. แอน วิชวลไลเซอร์
  2. วิชวล เคราส
  3. พล็อตโมเดล Keras
  4. คณะกรรมการเทนเซอร์
pip ติดตั้ง visualkeraspip ติดตั้ง ann_visualizerpip ติดตั้งกราฟวิซ

เราไม่จำเป็นต้องติดตั้ง "Tensor Board" และ "Keras Model Plot" แยกต่างหาก ซึ่งจะมาพร้อมกับการติดตั้ง Tensorflow & Keras ครั้งแรก

เราอาจใช้ห้องสมุดเพียงไม่กี่แห่งตามรายการด้านล่าง ไลบรารีส่วนใหญ่สามารถแปลงโมเดล TensorFlow เป็นไดอะแกรมโดยไม่ต้องฝึกอบรมข้อมูลอย่างชัดเจน คุณสามารถถือว่านี่เป็นแหล่งความจริงแหล่งเดียว ไลบรารีบางแห่ง เช่น Pandas, Skimage และ OpenCV จะมีประโยชน์เมื่ออ่านข้อมูลที่มีโครงสร้างหรือรูปภาพ

# นำเข้าห้องสมุดที่จำเป็นนำเข้าแพนด้าเป็น pdนำเข้า numpy เป็น np # นำเข้า numpyจากข้อมูลการนำเข้า skimage, io # นำเข้าไลบรารี skimage (ข้อมูล - ทดสอบรูปภาพและข้อมูลตัวอย่าง# io - การอ่าน บันทึก และการแสดงภาพ)จาก skimage.color นำเข้า rgb2grayนำเข้า matplotlib.pyplot เป็น plt # นำเข้า matplotlib.pyplot (เฟรมเวิร์กการลงจุดใน Python)%matplotlib แบบอินไลน์import os # โมดูลนี้ให้วิธีการแบบพกพาในการใช้ฟังก์ชันการทำงานที่ขึ้นอยู่กับระบบปฏิบัติการos.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'คำเตือนการนำเข้า#ระงับคำเตือนWarnings.filterwarnings('ละเว้น')จากหน้าจอนำเข้า IPython.displayนำเข้า cv2 เป็น cv
จาก sklearn.metrics นำเข้าความสับสน_เมทริกซ์
จาก sklearn.model_selection นำเข้า train_test_splitจาก tensorflow.keras import utilsจาก tensorflow.keras.models นำเข้า Sequential,load_modelจาก tensorflow.keras.layers นำเข้า Dense, Dropout, Flatten, Conv2D, MaxPool2D, BatchNormalizationจาก tensorflow.keras.optimizers นำเข้า Adamนำเข้าเทนเซอร์โฟลว์เป็น tfนำเข้านกทะเลเป็น sns

ลิงก์ที่เป็นประโยชน์สำหรับการสำรวจเนื้อหาเพิ่มเติมเกี่ยวกับ ANN และ CNN ตั้งแต่เริ่มต้น

เราจะกำหนดโมเดล CNN สามแบบที่แตกต่างกันด้วยไฮเปอร์พารามิเตอร์ที่แตกต่างกัน ตามหลักการแล้ว ในโลกแห่งความเป็นจริง เรามุ่งเป้าไปที่การนำสถาปัตยกรรมที่แตกต่างกันไปใช้เพื่อเพิ่มความแม่นยำสูงสุดหรือตัวชี้วัดที่เกี่ยวข้อง โดยพิจารณาว่าเรากำลังสร้างแบบจำลองสำหรับงานจำแนกประเภทที่มีหลายหมวดหมู่ การเลือกประเภทปัญหาของเราจะไม่มีผลกระทบใดๆ ต่อวิธีนำแพ็คเกจการแสดงภาพไปใช้

เราสร้างฟังก์ชันที่ผู้ใช้กำหนดเพื่อสร้างโมเดลที่แตกต่างกันสามแบบแยกกันด้วยจำนวนเลเยอร์ CNN, การรวมสูงสุด และเลเยอร์หนาแน่นที่แตกต่างกัน

4.1 – สถาปัตยกรรม 1 – เลเยอร์ CNN แบบตื้น + เลเยอร์ ANN

def build_model ():รุ่น = ลำดับ ()model.add(Conv2D(ตัวกรอง=64, kernel_size=(3, 3), input_shape=(128, 128, 1), การเปิดใช้งาน='relu'))model.add(Conv2D(ตัวกรอง=64, kernel_size=(3, 3), การเปิดใช้งาน='relu'))model.add(MaxPool2D((2, 2)))model.add(แบน())model.add (หนาแน่น (256, การเปิดใช้งาน = 'relu'))model.add (หนาแน่น (12, การเปิดใช้งาน = 'softmax'))model.compile(loss='categorical_crossentropy', เครื่องมือเพิ่มประสิทธิภาพ='adam', เมตริก=['ความแม่นยำ'])แบบส่งคืน

4.2 — สถาปัตยกรรม 2 — เลเยอร์ CNN ระดับลึก + ANN แบบตื้น

def sconstruct_model():smodel = ลำดับ()smodel.add(Conv2D(ตัวกรอง=64, kernel_size=(3, 3), input_shape=(128, 128, 3), การเปิดใช้งาน='relu'))smodel.add(Conv2D(ตัวกรอง=64, kernel_size=(3, 3), การเปิดใช้งาน='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(ตัวกรอง=128, kernel_size=(3, 3), การเปิดใช้งาน='relu'))smodel.add(Conv2D(ตัวกรอง=128, kernel_size=(3, 3), การเปิดใช้งาน='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(ตัวกรอง=128, kernel_size=(3, 3), การเปิดใช้งาน='relu'))smodel.add(Conv2D(ตัวกรอง=128, kernel_size=(3, 3), การเปิดใช้งาน='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(แบน())smodel.add (หนาแน่น (256, การเปิดใช้งาน = 'relu'))smodel.add (หนาแน่น (12, การเปิดใช้งาน = 'softmax'))#optimizer = อดัม(lr=0.001)smodel.compile (loss = 'categorical_crossentropy', เครื่องมือเพิ่มประสิทธิภาพ = 'adam', เมตริก = ['ความแม่นยำ'])#model.สรุป()กลับมาเป็นนางแบบ

4.3 — สถาปัตยกรรม 3 — เลเยอร์ CNN และ ANN แบบลึก

def cconstruct_model (อัตราการเรียนรู้):smodel = ลำดับ()smodel.add(Conv2D(ตัวกรอง=32, kernel_size=(3, 3), input_shape=(128, 128, 1), การเปิดใช้งาน='relu'))smodel.add(Conv2D(ตัวกรอง=32, kernel_size=(3, 3), การเปิดใช้งาน='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(ตัวกรอง=64, kernel_size=(3, 3), การเปิดใช้งาน='relu'))smodel.add(Conv2D(ตัวกรอง=64, kernel_size=(3, 3), การเปิดใช้งาน='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(ตัวกรอง=128, kernel_size=(3, 3), การเปิดใช้งาน='relu'))smodel.add(Conv2D(ตัวกรอง=128, kernel_size=(3, 3), การเปิดใช้งาน='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(แบน())smodel.add (หนาแน่น (256, การเปิดใช้งาน = 'relu'))smodel.add (หนาแน่น (256, การเปิดใช้งาน = 'relu'))smodel.add (หนาแน่น (12, การเปิดใช้งาน = 'softmax'))เครื่องมือเพิ่มประสิทธิภาพ = อดัม (lr=learningRate)smodel.compile(loss='categorical_crossentropy', เครื่องมือเพิ่มประสิทธิภาพ=เครื่องมือเพิ่มประสิทธิภาพ, เมตริก=['ความแม่นยำ'])smodel.สรุป()กลับมาเป็นนางแบบรุ่น=cconstruct_model(0.001)

โมดูล Python ชื่อ ANN Visualizer ช่วยให้เห็นภาพโครงข่ายประสาทเทียมด้วยโค้ดเพียงไม่กี่บรรทัด (Gheorghiu, 2022) ใช้โมดูล Graphviz ของ Keras และ Python เพื่อสร้างกราฟโครงข่ายประสาทเทียมที่เป็นระเบียบและน่าดึงดูด คุณมีความยืดหยุ่นในการมองเห็นเครือข่าย Deep Learning ทั้งหมดหรือเพียงแค่ Convolutional Neural Network ที่คุณสร้างขึ้นซึ่งขับเคลื่อนโดยความก้าวหน้าในการเรียนรู้เชิงลึก (Shah, 2018)

ใช้โครงสร้างต่อไปนี้ด้านล่างเพื่อสร้างการนำเสนอ PDF ของโครงข่ายประสาทเทียมของคุณ อย่างไรก็ตาม ก่อนหน้านั้น เราต้องรวบรวมโมเดลข้างต้นก่อน

รุ่น=สร้าง_รุ่น()

ann_viz (โมเดล, มุมมอง = True, ชื่อไฟล์ =”network.gv”, ชื่อ =”เครือข่าย MyNeural”)

  • แบบอย่าง - โมเดลต่อเนื่องจาก Keras
  • ดู - แสดงภาพกราฟหลังจากเรียกใช้ ann_viz() แล้ว
  • ชื่อไฟล์ - ชื่อของไฟล์
  • ชื่อ - ชื่อเฉพาะใดๆ เพื่อแสดงกราฟ
จาก ann_visualizer.visualize นำเข้า ann_vizann_viz(model, view=True, filename=”cconstruct_model”, title=”CNN — โมเดล 1 — สถาปัตยกรรมอย่างง่าย”)
รูปที่ 1: สแนปชอตของ build_model() ที่สร้างโดยใช้ ANN Visualizer เครดิต — ภาพที่พัฒนาโดยผู้เขียนโดยใช้ Jupyter Notebook ผลลัพธ์ต้นฉบับมีขนาดใหญ่เกินกว่าจะใส่ที่นี่เป็นรูปภาพได้ ดังนั้นจึงใช้สแน็ปช็อตของเลเยอร์ด้านล่างที่นี่

เครื่องมือ Python ชื่อ Visualkeras ช่วยให้ดูการออกแบบโครงข่ายประสาทเทียม Keras ได้ง่ายขึ้น (แยกกันหรือเป็นส่วนหนึ่งของ TensorFlow) สามารถตอบสนองความต้องการด้านสไตล์ส่วนใหญ่ได้อย่างง่ายดาย โครงข่ายประสาทเทียมแบบ Convolutional (CNN) ได้รับประโยชน์อย่างมากจากการพัฒนาสถาปัตยกรรมแบบเลเยอร์ โมเดลส่วนใหญ่ รวมถึงเครือข่ายฟีดฟอร์เวิร์ดแบบธรรมดา ได้รับประโยชน์อย่างมากจากการสร้างสถาปัตยกรรมสไตล์กราฟ ซึ่งโมดูลนี้รองรับ (Gavrikov, 2022)

model1=สร้าง_โมเดล()model2=sconstruct_model()model3=cconstruct_model(0.009)นำเข้า Visualkerasจาก PIL นำเข้า ImageFontVisualkeras.layered_view (model1, ตำนาน = True)Visualkeras.layered_view (model2, ตำนาน = True)Visualkeras.layered_view (model3, ตำนาน = True)
รูปที่ 2 แสดงการแสดงแผนภาพของสถาปัตยกรรมโมเดลที่แตกต่างกันสามแบบ เครดิต — ภาพที่พัฒนาโดยผู้เขียนโดยใช้ Jupyter Notebook

พื้นที่ keras.utils.plot_model จัดเตรียมฟังก์ชัน inbuilt เพื่อลงจุดโมเดลที่กำหนดและคอมไพล์ผ่าน Keras โดยใช้แพ็คเกจ Graphviz และ pydot ในรูปแบบกราฟิกนั้นใช้งานง่ายน้อยกว่าแพ็คเกจที่ใช้ด้านบน แต่จะสรุปสถาปัตยกรรมพื้นฐานของโมเดลตามลำดับ (Team, nd)

tf.keras.utils.plot_model(รุ่น1,to_file="model.png",show_shapes=จริงshow_dtype=เท็จshow_layer_names=จริงrankdir="วัณโรค",expand_nested=จริงจุดต่อนิ้ว=96,layer_range=ไม่มี,show_layer_activations=จริง)

ไฮเปอร์พารามิเตอร์ไม่กี่ตัวที่ต้องพิจารณา:

  1. รูปแบบ: อินสแตนซ์ของโมเดลที่คอมไพล์ของ Keras หรืออ็อบเจ็กต์โมเดล
  2. to_file: ชื่อไฟล์ของรูปภาพ
  3. show_รูปร่าง: แสดงขนาดและรูปร่างของแต่ละชั้นในโครงข่ายประสาทเทียม
  4. show_layer_activation: ฟังก์ชั่นการเปิดใช้งานการแสดงผลที่ใช้ภายในเซลล์ประสาท
รูปที่ 3 แสดงผลลัพธ์ของ tf.keras.utils.plot_model() เครดิต — ภาพที่พัฒนาโดยผู้เขียนโดยใช้ Jupyter Notebook

TensorBoard เป็นอินเทอร์เฟซแดชบอร์ดที่ช่วยให้ผู้ใช้เห็นภาพบันทึกของการเรียกใช้โมเดลต่างๆ บันทึกมีตั้งแต่การติดตามการวัดการตรวจสอบโมเดล เช่น ความแม่นยำ การเรียกคืน RMSE MAPE และ MSE ในยุคต่างๆ ไปจนถึงการสร้างกราฟแนวคิดของสถาปัตยกรรมของโมเดล เป็นเครื่องมือที่มีประสิทธิภาพในการแสดงภาพว่าโมเดลที่ต้องการตรงกับการออกแบบที่คาดหวังหรือไม่ พร้อมทั้งให้ข้อมูลเชิงลึกว่าโมเดลสามารถเปลี่ยนแปลงได้อย่างไรโดยใช้กราฟระดับปฏิบัติการ

หากต้องการใช้ฟังก์ชันนี้ เราจำเป็นต้องโหลด TensorBoard ก่อน จากนั้นจึงสร้างไดเร็กทอรีบันทึก

%load_ext เทนเซอร์บอร์ดจากวันที่และเวลานำเข้า วันที่เวลาจาก tensorflow นำเข้า keras# กำหนดการเรียกกลับ Keras TensorBoardlogdir="logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

สร้างการเรียกกลับ Keras TensorBoard และระบุไดเร็กทอรีบันทึกก่อนการฝึก คุณอาจตรวจสอบให้แน่ใจว่าข้อมูลกราฟได้รับการบันทึกสำหรับการแสดงภาพ TensorBoard โดยระบุการเรียกกลับนี้ให้กับ model.fit() เมื่อคุณเรียกใช้ TensorBoard อาจใช้เวลาโหลดสักครู่

รุ่น.พอดี(X2_รถไฟ, Y2_รถไฟ,ชุด_ขนาด=64,ยุค = 5,โทรกลับ=[tensorboard_callback])

หมายเหตุ: X2_train และ Y2_train เป็นชุดข้อมูลการฝึกที่ไม่แสดงในโค้ดด้านบน คุณสามารถแทนที่ข้อมูลนี้ด้วยข้อมูลการฝึกอบรมของคุณเองได้

TensorBoard จะแสดงกราฟระดับปฏิบัติการตามค่าเริ่มต้นเสมอ (แท็ก "ค่าเริ่มต้น" จะถูกไฮไลต์ทางด้านซ้าย) กราฟจะกลับหัวเมื่อเปรียบเทียบกับโค้ด เนื่องจากข้อมูลไหลจากล่างขึ้นบน แต่อย่างที่คุณเห็น กราฟมีลักษณะคล้ายกับคำอธิบายของโมเดล Keras โดยคร่าวๆ โดยมีขอบเพิ่มเติมที่นำไปสู่โหนดการคำนวณอื่นๆ (Tensorflow, 2022)

รูปที่ 4 แสดงเอาต์พุตของ TensorBoard เครดิต — ภาพที่พัฒนาโดยผู้เขียนโดยใช้ Jupyter Notebook

บริบทเพิ่มเติมเกี่ยวกับวิธีใช้ TensorBoard มีอยู่ในข้อมูลอ้างอิง

จากมุมมองเชิงพาณิชย์ ซึ่งผู้ใช้ต้องนำเสนอการวิเคราะห์ของตนต่อกลุ่มผู้มีส่วนได้ส่วนเสีย ไดอะแกรมเหล่านี้จะเพิ่มความซับซ้อนให้กับการสนทนามากขึ้น อาจไม่ใช่การเพิ่มมูลค่ามากนัก อย่างไรก็ตาม จากมุมมองทางวิชาการและการเรียนรู้ การใช้แพ็คเกจเหล่านี้เพื่อแสดงสถาปัตยกรรมการเรียนรู้เชิงลึกเหล่านี้ก็มีประโยชน์ สำหรับฉัน Visualizer ของ ANN โดดเด่นกว่าตัวอื่นๆ เนื่องจากแยกแยะไดอะแกรมได้ง่าย ในขณะที่เอาต์พุตกราฟของ TensorBoard ต้องใช้เทคนิคเพิ่มเติมก่อนจึงจะสามารถใช้ผลลัพธ์ได้

Gavrikov, P. (2022, 13 เมษายน) Visualkeras สำหรับ Keras / TensorFlow. GitHub https://github.com/paulgavrikov/visualkeras

Gheorghiu, T. (2022, 21 ตุลาคม) แอน วิชวลไลเซอร์. GitHub https://github.com/RedaOps/ann-visualizer

ชาห์ อ. (2018, 28 เมษายน) การแสดงภาพเครือข่ายประสาทเทียม (ANN) ด้วยโค้ดเพียงบรรทัดเดียว. ปานกลาง. https://towardsdatascience.com/visualizing-artificial-neural-networks-anns-with-just-one-line-of-code-b4233607209e

กองล้น (และ). การเรียนรู้ของเครื่อง — คุณเห็นภาพสถาปัตยกรรมโครงข่ายประสาทเทียมได้อย่างไร การแลกเปลี่ยนสแต็กวิทยาศาสตร์ข้อมูล สืบค้นเมื่อวันที่ 29 ตุลาคม 2022 จาก https://datascience.stackexchange.com/questions/12851/how-do-you-visualize-neural-network-architectures

ทีมเค (nd) เอกสารประกอบของ Keras: ยูทิลิตีการพล็อตโมเดล. Keras.io สืบค้นเมื่อวันที่ 29 ตุลาคม 2022 จาก https://keras.io/api/utils/model_plotting_utils/#modeltodot-function

เทนเซอร์โฟลว์ (2022, 6 มกราคม) ตรวจสอบกราฟ TensorFlow | เทนเซอร์บอร์ด. เทนเซอร์โฟลว์ https://www.tensorflow.org/tensorboard/graphs

วิธีแสดงภาพสถาปัตยกรรมเครือข่ายประสาทเทียมใน Python เผยแพร่ซ้ำจากแหล่งที่มา https://towardsdatascience.com/how-to-visualize-neural-network-architectures-in-python-567cd2aa6d62?source=rss—-7f60cf5620c9—4 ผ่าน https:// ไปทาง datascience.com/feed

<!–

->

ประทับเวลา:

เพิ่มเติมจาก ที่ปรึกษาบล็อคเชน