ساخت شماتیک شبکه عصبی با پایتون
اگر شما هم در حوزهی شبکههای عصبی و cnn کار میکنید احتمالا نیاز خواهید داشت تا در مورد کارهای خود یک ارائه یا یک داکیومنت ایجاد کنید و برای اینکه از شبکه عصبی خودتان و اندازهی لایهها شماتیکی رسم کنید نیاز دارید از مراحل گفته شده در این آموزش استفاده کنید.
ساخت شماتیک شبکه عصبی با پایتون
برای ساخت یک شماتیک از شبکه عصبی خود شما نیاز به پکیج visualkeras دارید. برای نصب این پکیج از دستور زیر استفاده کنید:
pip install visualkeras
حالا کافیست متغیر model خود را به تابع زیر بدهید تا برای شما شماتیک شبکهی شما را رسم کند:
import visualkeras visualkeras.layered_view(model, to_file='output.png').show()
برای مثال:
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense, Flatten, Conv2D, Dropout, MaxPooling2D, InputLayer, ZeroPadding2D
from collections import defaultdict
import visualkeras
from PIL import ImageFont
# create VGG16
image_size = 224
model = Sequential()
model.add(InputLayer(input_shape=(image_size, image_size, 3)))
model.add(ZeroPadding2D((1, 1)))
model.add(Conv2D(64, activation='relu', kernel_size=(3, 3)))
model.add(ZeroPadding2D((1, 1)))
model.add(Conv2D(64, activation='relu', kernel_size=(3, 3)))
model.add(visualkeras.SpacingDummyLayer())
model.add(MaxPooling2D((2, 2), strides=(2, 2)))
model.add(ZeroPadding2D((1, 1)))
model.add(Conv2D(128, activation='relu', kernel_size=(3, 3)))
model.add(ZeroPadding2D((1, 1)))
model.add(Conv2D(128, activation='relu', kernel_size=(3, 3)))
model.add(visualkeras.SpacingDummyLayer())
model.add(MaxPooling2D((2, 2), strides=(2, 2)))
model.add(ZeroPadding2D((1, 1)))
model.add(Conv2D(256, activation='relu', kernel_size=(3, 3)))
model.add(ZeroPadding2D((1, 1)))
model.add(Conv2D(256, activation='relu', kernel_size=(3, 3)))
model.add(ZeroPadding2D((1, 1)))
model.add(Conv2D(256, activation='relu', kernel_size=(3, 3)))
model.add(visualkeras.SpacingDummyLayer())
model.add(MaxPooling2D((2, 2), strides=(2, 2)))
model.add(ZeroPadding2D((1, 1)))
model.add(Conv2D(512, activation='relu', kernel_size=(3, 3)))
model.add(ZeroPadding2D((1, 1)))
model.add(Conv2D(512, activation='relu', kernel_size=(3, 3)))
model.add(ZeroPadding2D((1, 1)))
model.add(Conv2D(512, activation='relu', kernel_size=(3, 3)))
model.add(visualkeras.SpacingDummyLayer())
model.add(MaxPooling2D((2, 2), strides=(2, 2)))
model.add(ZeroPadding2D((1, 1)))
model.add(Conv2D(512, activation='relu', kernel_size=(3, 3)))
model.add(ZeroPadding2D((1, 1)))
model.add(Conv2D(512, activation='relu', kernel_size=(3, 3)))
model.add(ZeroPadding2D((1, 1)))
model.add(Conv2D(512, activation='relu', kernel_size=(3, 3)))
model.add(MaxPooling2D())
model.add(visualkeras.SpacingDummyLayer())
model.add(Flatten())
model.add(Dense(4096, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(4096, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1000, activation='softmax'))
# Now visualize the model!
color_map = defaultdict(dict)
color_map[Conv2D]['fill'] = 'orange'
color_map[ZeroPadding2D]['fill'] = 'gray'
color_map[Dropout]['fill'] = 'pink'
color_map[MaxPooling2D]['fill'] = 'red'
color_map[Dense]['fill'] = 'green'
color_map[Flatten]['fill'] = 'teal'
font = ImageFont.truetype("arial.ttf", 32)
visualkeras.layered_view(model, to_file='../figures/vgg16.png', type_ignore=[visualkeras.SpacingDummyLayer])
visualkeras.layered_view(model, to_file='../figures/vgg16_legend.png', type_ignore=[visualkeras.SpacingDummyLayer],
legend=True, font=font)
visualkeras.layered_view(model, to_file='../figures/vgg16_spacing_layers.png', spacing=0)
visualkeras.layered_view(model, to_file='../figures/vgg16_type_ignore.png',
type_ignore=[ZeroPadding2D, Dropout, Flatten, visualkeras.SpacingDummyLayer])
visualkeras.layered_view(model, to_file='../figures/vgg16_color_map.png',
color_map=color_map, type_ignore=[visualkeras.SpacingDummyLayer])
visualkeras.layered_view(model, to_file='../figures/vgg16_flat.png',
draw_volume=False, type_ignore=[visualkeras.SpacingDummyLayer])
visualkeras.layered_view(model, to_file='../figures/vgg16_scaling.png',
scale_xy=1, scale_z=1, max_z=1000, type_ignore=[visualkeras.SpacingDummyLayer])
خروجی:

برای مشاهده نمونه کدهای بیشتر به مخزن گیتهاب پروژه بروید. کدهای بالا به زبان برنامه نویسی پایتون است.
اگر مشکلی با این آموزش دارید در بخش نظرات این نوشته برای ما بنویسید.
برای امتیاز به این نوشته کلیک کنید!
[کل: 3 میانگین: 5]



















performance افت نمیکنه وقتی شبکه خیلی عمیق باشه؟
سلام. بله، با افزایش عمق شبکه و رسم شماتیک، ممکنه کمی افت پرفورمنس در زمان اجرا ایجاد بشه، اما معمولاً قابل چشم پوشی است.
روی Colab هم میشه از visualkeras استفاده کرد یا فقط روی لوکال؟
بله، visualkeras روی Colab هم قابل استفاده است. فقط کافیه پکیج رو با pip نصب کنید.
امکان تغییر رنگ لایهها به صورت خودکار بر اساس نوع لایه وجود داره؟
بله، با استفاده از color_map در visualkeras میتوانید رنگ لایهها را بر اساس نوع آنها به صورت خودکار تغییر دهید. برای اطلاعات بیشتر به مستندات پکیج مراجعه کنید.
برای فونت فارسی هم امکان سفارشیسازی داره یا فقط فونتهای انگلیسی؟
سلام، متاسفانه این پکیج فقط از فونتهای انگلیسی پشتیبانی میکند و امکان سفارشیسازی برای فونت فارسی وجود ندارد.
میشه این روش رو برای مدلهای Sequential و Functional هر دو استفاده کرد؟
سلام، بله، این روش برای هر دو نوع مدلهای Sequential و Functional قابل استفاده است. امیدوارم براتون مفید باشه!