เครื่องมือใดที่ฉันสามารถใช้เพื่อดูรุ่น Keras? คลิกที่เก่า "ภาพมีค่าเป็นพันคํา" อาจเป็นความจริงมากขึ้นเมื่อทํางานกับรูปแบบการเรียนรู้เครื่องที่ซับซ้อน หากคุณไม่ได้มีหน่วยความจําถ่ายภาพคุณสามารถสูญเสียการติดตามของสถาปัตยกรรมรุ่นได้อย่างรวดเร็วเมื่ออ่านผ่านรหัส โชคดีที่มีวิธีง่ายๆในการดูรูปแบบการเรียนรู้ด้วยเครื่อง คู่มือนี้มุ่งเน้นไปที่การดูรูปแบบของ Keras และใช้รุ่นต่อไปนี้ (“รุ่นทดสอบ”) สําหรับการแสดงผล: def build_model(pad_len, imu_dim, tof_dim, n_classes): def time_sum(x): return K.sum(x, axis=1) def squeeze_last_axis(x): return tf.squeeze(x, axis=-1) def expand_last_axis(x): return tf.expand_dims(x, axis=-1) filters_l1 = 64 kernel_l1 = 3 filters_l2 = 128 kernel_l2 = 5 reduction = 8 pool_size = 2 drop = 0.3 wd = 1e-4 inp = Input(shape=(pad_len, imu_dim + tof_dim)) imu = Lambda(lambda t: t[:, :, :imu_dim])(inp) tof = Lambda(lambda t: t[:, :, imu_dim:])(inp) # First CNN branch shortcut_1 = imu x1 = Conv1D(filters_l1, kernel_l1, padding="same", use_bias=False, kernel_regularizer=l2(wd))(imu) x1 = BatchNormalization()(x1) x1 = Activation("relu")(x1) x1 = Conv1D(filters_l1, kernel_l1, padding="same", use_bias=False, kernel_regularizer=l2(wd))(x1) x1 = BatchNormalization()(x1) x1 = Activation("relu")(x1) ch = x1.shape[-1] se = GlobalAveragePooling1D()(x1) se = Dense(ch//reduction, activation="relu")(se) se = Dense(ch, activation="sigmoid")(se) se = Reshape((1, ch))(se) x1 = Multiply()([x1, se]) if shortcut_1.shape[-1] != filters_l1: shortcut_1 = Conv1D(filters_l1, 1, padding="same", use_bias=False, kernel_regularizer=l2(wd))(shortcut_1) shortcut_1 = BatchNormalization()(shortcut_1) x1 = add([x1, shortcut_1]) x1 = Activation("relu")(x1) x1 = MaxPooling1D(pool_size)(x1) x1 = Dropout(drop)(x1) shortcut_2 = x1 x1 = Conv1D(filters_l2, kernel_l2, padding="same", use_bias=False, kernel_regularizer=l2(wd))(x1) x1 = BatchNormalization()(x1) x1 = Activation("relu")(x1) x1 = Conv1D(filters_l2, kernel_l2, padding="same", use_bias=False, kernel_regularizer=l2(wd))(x1) x1 = BatchNormalization()(x1) x1 = Activation("relu")(x1) ch = x1.shape[-1] se = GlobalAveragePooling1D()(x1) se = Dense(ch//reduction, activation="relu")(se) se = Dense(ch, activation="sigmoid")(se) se = Reshape((1, ch))(se) x1 = Multiply()([x1, se]) if shortcut_2.shape[-1] != filters_l2: shortcut_2 = Conv1D(filters_l2, 1, padding="same", use_bias=False, kernel_regularizer=l2(wd))(shortcut_2) shortcut_2 = BatchNormalization()(shortcut_2) x1 = add([x1, shortcut_2]) x1 = Activation("relu")(x1) x1 = MaxPooling1D(pool_size)(x1) x1 = Dropout(drop)(x1) # Second CNN branch x2 = Conv1D(filters_l1, kernel_l1, padding="same", use_bias=False, kernel_regularizer=l2(wd))(tof) x2 = BatchNormalization()(x2) x2 = Activation("relu")(x2) x2 = MaxPooling1D(2)(x2) x2 = Dropout(0.2)(x2) x2 = Conv1D(filters_l2, kernel_l1, padding="same", use_bias=False, kernel_regularizer=l2(wd))(x2) x2 = BatchNormalization()(x2) x2 = Activation("relu")(x2) x2 = MaxPooling1D(2)(x2) x2 = Dropout(0.2)(x2) merged = Concatenate()([x1, x2]) xa = Bidirectional(LSTM(128, return_sequences=True, kernel_regularizer=l2(wd)))(merged) xb = Bidirectional(GRU(128, return_sequences=True, kernel_regularizer=l2(wd)))(merged) xc = GaussianNoise(0.09)(merged) xc = Dense(16, activation="elu")(xc) x = Concatenate()([xa, xb, xc]) x = Dropout(0.4)(x) score = Dense(1, activation="tanh")(x) score = Lambda(squeeze_last_axis)(score) weights = Activation("softmax")(score) weights = Lambda(expand_last_axis)(weights) context = Multiply()([x, weights]) x = Lambda(time_sum)(context) x = Dense(256, use_bias=False, kernel_regularizer=l2(wd))(x) x = BatchNormalization()(x) x = Activation("relu")(x) x = Dropout(0.5)(x) x = Dense(128, use_bias=False, kernel_regularizer=l2(wd))(x) x = BatchNormalization()(x) x = Activation("relu")(x) x = Dropout(0.3)(x) out = Dense(n_classes, activation="softmax", kernel_regularizer=l2(wd))(x) return Model(inp, out) ดังที่คุณเห็นรุ่นข้างต้นค่อนข้างซับซ้อน ใช้ในการเรียนรู้รูปแบบจากหน่วยวัด intertial ("IMU") และข้อมูลเซ็นเซอร์อื่น ๆ เพื่อให้ชัดเจนฉันไม่ได้สร้างมัน มันอ้างอิงจากนี้ . ตามที่คุณจะสังเกตเห็นการกําหนดค่ารุ่นในบันทึกต้นฉบับใช้วัตถุที่กําหนดเองเพื่อบรรจุกลยุทธ์บางอย่างที่ซ้ํากันในรูปแบบการออกแบบ ฉันเลือกที่จะลบวัตถุเหล่านี้อย่างชัดเจนและกําหนดกลยุทธ์ "ในบรรทัด" เพื่อให้สามารถดูโครงสร้างที่สมบูรณ์ของรุ่นได้ดีขึ้นในการประยุกต์ใช้ที่มีการเปลี่ยนแปลงเล็กน้อยของฉัน กระดาษแข็ง คู่มือนี้พูดถึง 3 เครื่องมือการดูภาพต่อไปนี้: Netron The Python package visualkeras TensorBoard 1. ใช้ Netron เพื่อดูรูปแบบ Keras ของคุณ เป็นเครื่องมือการแสดงผลที่ง่ายที่สุดที่คุณสามารถใช้ได้ คุณเพียงแค่ต้องคลิกที่ คลิกที่หน้าแรกแล้วเลือกรุ่นที่คุณต้องการแสดงภาพ นี่คือการแสดงภาพของชั้นแรกของรุ่นทดสอบ: อิเล็กทรอน Open Model... เมื่อรุ่นถูกโหลดคุณสามารถคลิกที่ nodes ในกราฟรุ่นเพื่อดูคุณสมบัติของพวกเขา: คุณสามารถส่งออกรูปแบบกราฟใน และ รูปแบบโดยคลิกที่ไอคอนเมนูหลักและเลือกตัวเลือกการส่งออกที่เหมาะสม .png .svg 2. การใช้ เพื่อดูรูปแบบ Keras ของคุณ มุมมอง มุมมอง โซ แพคเกจ Python ยังใช้งานง่ายมากและมีวิธีที่สะดวกในการดูรูปแบบก่อนการฝึกอบรม คุณสามารถติดตั้งแพคเกจสําหรับโครงการการเรียนรู้เครื่องของคุณโดยใช้ : visualkeras pip pip install visualkeras รหัส Python ต่อไปแสดงให้เห็นถึงการใช้งานขั้นพื้นฐานของแพคเกจ: # [Imports for your Keras model here...] import visualkeras # [Utility function to build your Keras model...] def build_model(model_params): # [Your model definition here...] # [Build the model...] model = build_model(model_params) # [Visualize the model...] visualkeras.graph_view(model).show() โซ วิธีการผลิตกราฟิกต่อไปนี้ของชั้นแรกของรุ่นทดสอบ: graph_view แพคเกจยังนําเสนอ a วิธีการที่ผลิตกราฟิกของชั้นรุ่นที่แตกต่างกันโดยประเภทและขนาด: layered_view visualkeras.layered_view(model, legend=True).show() ตามที่เห็นผ่าน สอง พารามิเตอร์สร้างตํานานที่อธิบายแต่ละชั้น: True legend ข้อได้เปรียบหนึ่งของ แพคเกจคือการควบคุมที่นําเสนอในการแสดงกราฟิก คุณสามารถตรวจสอบพารามิเตอร์ที่ใช้ในการแก้ไขการส่งออกกราฟิกบน หน้า visualkeras แพคเกจเอกสาร 3. การใช้ เพื่อดูรูปแบบ Keras ทนเนอร์บอร์ด ทนเนอร์บอร์ด เป็นตัวเลือกที่สะดวกสําหรับการแสดงภาพของรุ่น Keras เนื่องจากติดตั้งพร้อมกับ . ด้วย "นวด" น้อย ๆ นอกจากนี้ยังสามารถใช้ เพื่อดูโครงสร้างของรูปแบบก่อนการฝึกอบรม TensorBoard TensorFlow TensorBoard 3.1 การติดตั้ง บรรจุภัณฑ์ jupyter-tensorboard ส่วนนี้ใช้ ในแง่ของ A นี้จําเป็นต้องติดตั้งของ แพคเกจซึ่งในทางกลับกันมีสองพึ่งพา ใช้ขั้นตอนต่อไปนี้เพื่อติดตั้ง : TensorBoard Jupyter notebook jupyter-tensorboard jupyter-tensorboard Install the package using . jupyter pip install jupyer Use the command to the package which was installed with the package installation process. The version of the package installed with which is as of this writing is not compatible with . This downgrade step installs a version of the package that is compatible with . See this for more information. pip install --upgrade notebook==6.4.12 downgrade notebook jupyter notebook jupyter 7.4.5 jupyter-tensorboard notebook jupyter-tensorboard StackOverflow article Install the package using . jupyter-tensorboard pip install jupyter-tensorboard 3.2 การตั้งค่าบันทึก Jupyter เพื่อดูรูปแบบ Keras ของคุณ ดังกล่าวข้างต้นคุณสามารถดูรูปแบบ Keras ใน ก่อนที่จะฝึกมัน รหัสบันทึก Jupyter ต่อไปแสดงให้เห็นว่าทําอย่างไรโดยใช้รุ่นทดสอบจากส่วนแนะนํา: TensorBoard # Cell 1: Imports import tensorflow as tf from tensorflow.keras.models import Model, load_model from tensorflow.keras.layers import ( Input, Conv1D, BatchNormalization, Activation, add, MaxPooling1D, Dropout, Bidirectional, LSTM, GlobalAveragePooling1D, Dense, Multiply, Reshape, Lambda, Concatenate, GRU, GaussianNoise ) from tensorflow.keras.regularizers import l2 from tensorflow.keras import backend as K # Cell 2: Set logs directory LOG_DIR = "logs" # Cell 3: Utility function to build model # [`build-model` function for test model from introductory section here...] # Cell 4: Build the model model = build_model(398, 12, 335, 18) # Cell 5: Compile the model model.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"]) # Cell 6: Create a TensorBoard callback tensorboard_callback = tf.keras.callbacks.TensorBoard( log_dir=LOG_DIR, histogram_freq=1, write_graph=True, profile_batch=0 # Disable profiling ) # Cell 7: Create dummy `x` and `y` training inputs that match model input and output shapes dummy_x_input = tf.random.normal((1, 398, 347)) # Batch size 1, input shape (398,347) dummy_y_input = tf.random.normal((1, 18)) # Batch size 1, input shape (18, ) # Cell 8: "Train" the model for zero epochs to create a conceptual graph of the model model.fit(dummy_x_input, dummy_y_input, epochs=0, batch_size=1, callbacks=[tensorboard_callback]) # Cell 9: Load the TensorBoard notebook extension %load_ext tensorboard # Cell 10: Launch TensorBoard %tensorboard --logdir $LOG_DIR --host localhost หากคุณเรียกใช้รหัสบันทึก Jupyter ด้านบนเซลล์สุดท้ายควรส่งออก เมื่อการดําเนินการเซลล์เสร็จสมบูรณ์คุณสามารถนําทางไปยัง เพื่อดู dashboard ของคุณ Launching TensorBoard http://localhost:6006 TensorBoard คุณสามารถแก้ไขพอร์ต TensorBoard โดยส่งตัวเลือก --port ไปยังคําสั่งมหัศจรรย์ %tensorboard เช่น %tensorboard --logdir $LOG_DIR --host localhost --port 8088 คุณสามารถแก้ไขพอร์ต TensorBoard โดยผ่าน ตัวเลือกสําหรับ คําสั่ง Magic E.G. . --port %tensorboard %tensorboard --logdir $LOG_DIR --host localhost --port 8088 เคล็ดลับ: ฉันกําลังทํางานบน Windows 10 ที่ฉันได้สังเกตเห็นบางพฤติกรรมแปลกประหลาดเกี่ยวกับ TensorBoard เพื่อให้ TensorBoard เริ่มต้นอย่างถูกต้องทุกครั้งที่ฉันเรียกใช้แล็ปท็อป Jupyter ฉันต้องลบไฟล์ชั่วคราวทั้งหมดใน C:\Users\[MY_WINDOWS_USERNAME]\AppData\Local\Temp\.tensorboard-info directory ฉันกําลังทํางานบน Windows 10 ที่ฉันได้สังเกตเห็นบางพฤติกรรมแปลกประหลาดเกี่ยวกับ TensorBoard เพื่อให้ TensorBoard เริ่มต้นอย่างถูกต้องทุกครั้งที่ฉันเรียกใช้บันทึก Jupyter ฉันต้องลบไฟล์ชั่วคราวทั้งหมดใน ผู้ดูแลระบบ Tip: C:\Users\[MY_WINDOWS_USERNAME]\AppData\Local\Temp\.tensorboard-info 3.3 การมองเห็นรุ่น Keras ของคุณด้วย TensorBoard TensorBoard ควรเปิดโดยอัตโนมัติไปยัง dashboard. หากไม่ได้คุณสามารถคลิกที่ ตัวเลือกเมนูหรือคุณสามารถเลือก จากเมนูลดลง Graphs Graphs Graphs จาก the ครั้งที่เข้าดู Select เพื่อดูโครงสร้างของรุ่นของคุณ คุณควรจะเห็นหัวฉีดเดียวที่แสดงให้เห็นรูปแบบทั้งหมด คลิกสองครั้งที่หัวฉีดเพื่อดูโครงสร้างของกราฟย่อย Graphs Conceptual graph คุณสามารถคลิกสองครั้งที่ nodes ส่วนบุคคลภายในโครงสร้าง sub-graph เพื่อดูคุณสมบัติของพวกเขา TensorBoard ยังช่วยให้คุณสามารถส่งออกกราฟรุ่นใน รูปแบบ .png ข้อสรุป แต่ละวิธีการแสดงภาพที่กล่าวถึงข้างต้นมีข้อดีและข้อเสียของมัน Netron เป็นเรื่องง่ายมากที่จะใช้กับรุ่นที่ได้รับการฝึกอบรมในขณะที่ เป็นเครื่องมือที่ง่ายที่สุดที่จะใช้กับรุ่นที่ไม่ได้รับการฝึกอบรม ตามที่เห็น TensorBoard สามารถใช้กับรุ่นที่ไม่ได้รับการฝึกอบรมได้ แต่ต้องทํางานมากขึ้นเพื่อตั้งค่าอย่างถูกต้อง visualkeras