MATLAB 2019b에서 CNN을 만들었으며 훈련 된 CNN은 "trainednet.mat"라는 파일에 저장됩니다. 훈련 된 .mat 파일을 Python으로로드하고 MATLAB 2019b에로드하는 대신 Python에서 이미지를 분류하는 방법이 궁금합니다. keras에서 사용할 수 있도록 h5py를 사용하여 .mat 파일을 .h5 파일로 변환하려고 시도했지만 작동하지 않습니다. 나는 또한 sio.loadmat docs.scipy.org/doc/scipy/reference/tutorial/io.html이라는 scipy 함수에 대해 들었지만 이것이 파이썬 구현에 사용할 수 있는지 확실하지 않습니다. 위에서 언급 한 방법이 올바르게 구현되면 작동합니까 아니면이 문제에 접근하는 다른 방법이 있습니까?
짧은 대답은 가능하지만 Python 코드에서 네트워크의 일부 (최소한 예측을위한 부분)를 다시 만들어야하므로 번거롭지 않습니다. numpy 및 scipy 로만 작동 하거나 GPU를 활용하기 위해 PyTorch / TensorFlow 로 다시 만들 수도 있습니다 .
trainednet.mat
당신은 아마 NN의 가중치를 저장 언급, 당신은, 원래 모델 (MATLAB의 하나), 즉 기준으로 NN의 구조를 다시 파이썬에서 행렬 계산을 수행해야합니다.
언급했듯이 먼저 .mat
by scipy
를 로드합니다.
from scipy.io import loadmat
parameters = loadmat("trainednet.mat")
이제는 parameters
구조가 네트워크에 크게 의존하는 Python 사전입니다. 다음 세부 정보는 CNN의 종류에 따라 다르지만 기본 워크 플로는 다음과 유사합니다.
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)
매우 까다로운 컨볼 루션 연산을 제외하고 대부분의 부분은 구현하기 쉽습니다. 이 길을 가고 싶다면 NN 라이브러리를 사용하는 것이 더 나을 수 있습니다.
간단히 말해, 가능하지만 matlab 에서 python 으로 동일한 코드 (NN 아키텍처에서와 같은 코드)를 다시 구현하려면 많은 노력이 필요했습니다 . 이 가이드 를 Python으로 MATLAB 사전 훈련 된 네트워크 변환의 시작으로 참조 할 수 있습니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다