سلام.
تو پایتون 2 راه برای توسعه شبکه وجود دارد
1- استفاده از فایل .prototxt
2- استفاده از pycaffe
در روش اول همانطور که اطلاعات دارید تعاریف شبکه در فایل .prototxt پیاده سازی میشه و در این پست می تونید یک نمونه از آن را ببینید.
و اما روش دوم که نصب pycaffe هستش که این امکان را به شما میده که شبکه را در کد پایتون تعریف کنید.
به صورت زیر :
def iris_network(lmdb_path, batch_size):
"""
Simple network for Iris classification.
:param lmdb_path: path to LMDB to use (train or test LMDB)
:type lmdb_path: string
:param batch_size: batch size to use
:type batch_size: int
:return: the network definition as string to write to the prototxt file
:rtype: string
"""
net = caffe.NetSpec()
net.data, net.labels = caffe.layers.Data(batch_size = batch_size, backend = caffe.params.Data.LMDB,
source = lmdb_path, ntop = 2)
net.data_aug = caffe.layers.Python(net.data,
python_param = dict(module = 'tools.layers', layer = 'DataAugmentationRandomMultiplicativeNoiseLayer'))
net.labels_aug = caffe.layers.Python(net.labels,
python_param = dict(module = 'tools.layers', layer = 'DataAugmentationDuplicateLabelsLayer'))
net.fc1 = caffe.layers.InnerProduct(net.data_aug, num_output = 12,
bias_filler = dict(type = 'xavier', std = 0.1),
weight_filler = dict(type = 'xavier', std = 0.1))
net.sigmoid1 = caffe.layers.Sigmoid(net.fc1)
net.fc2 = caffe.layers.InnerProduct(net.sigmoid1, num_output = 3,
bias_filler = dict(type = 'xavier', std = 0.1),
weight_filler = dict(type = 'xavier', std = 0.1))
net.score = caffe.layers.Softmax(net.fc2)
net.loss = caffe.layers.MultinomialLogisticLoss(net.score, net.labels_aug)
return net.to_proto()
و اما مزیت استفاده از فایل .prototxt نسبت به pycaffe این هستش که اکثر شبکه ها در model zoo فایل .prototxt آن را در اختیار دارید که می تونید به راحتی عملیات آموزش یا finetuning را انجام بدید. و همچنین به راحتی می تونید شبکه مورد نظر را رسم کنید.