Короткий ответ: это возможно, однако, это не без проблем, так как вам потребуется воссоздать часть сети (по крайней мере, часть для прогнозирования) в коде python. Он будет работать только с numpy и scipy или может также воссоздать с PyTorch / TensorFlow для использования графических процессоров.
Упомянутый вами trainednet.mat
, вероятно, хранил веса NN, и вам нужно будет воссоздать архитектуру NN, основанную на исходной модели (в matlab), т. Е. Выполнить матричные вычисления в python.
Как вы уже упоминали, вы сначала загрузите .mat
на scipy
с
from scipy.io import loadmat
parameters = loadmat("trainednet.mat")
, а теперь parameters
- это словарь Python, где его структура очень зависит от вашей сети. Следующие детали будут отличаться для каждого вида CNN, но основной рабочий процесс c выглядит примерно так:
def predict(img, parameters):
# the kind of saved parameters
# your trainednet.mat should have weights for something like
# w1,w2,w3,w4... for weights of convolutional layers
# weights of dense layers
# b3,b4... for any bias from layers
# convolution operation
z = convolution(..., img, w1)
# ReLU non-linearity
z[z<=0] = 0
# convolution operation
z = convolution(..., z, w2)
# ReLU non-linearity
z[z<=0] = 0
z = maxpool(z, ...).reshape(...) # maxpooling operation
# dense layer with bias
z = w3.dot(z) + b3
# ReLU non-linearity
z[z<=0] = 0
# second dense layer with bias
z = w4.dot(z) + b4
# predict class probabilities
probs = softmax(z)
return probs
from scipy.ndimage import imread
img = imread(FILENAME, mode="RGB")
predict(img, parameters)
Большую часть легко реализовать, кроме операции свертки, которая чрезвычайно сложна. Если вы хотите использовать go на этом маршруте, возможно, вам лучше использовать для этого библиотеку NN.
Короче говоря, это возможно, но требует много усилий для повторной реализации тот же код (код, что и в архитектуре NN) от matlab до python. Вы можете обратиться к этому руководству как к источнику преобразования предварительно обученной сети Matlab в python.