gpt4 book ai didi

python - 是否可以将经过训练的 CNN 存储为 .mat 文件并使用该文件在 Python 中制定分类算法?

转载 作者:太空宇宙 更新时间:2023-11-03 19:44:09 26 4
gpt4 key购买 nike

我在 MATLAB 2019b 中创建了一个 CNN,训练后的 CNN 存储在名为“trainednet.mat”的文件中。我想知道如何在 Python 中加载经过训练的 .mat 文件并在 Python 中对图像进行分类,而不是在 MATLAB 2019b 上加载它。我尝试使用 h5py 将 .mat 文件转换为 .h5 文件,以便我可以在 keras 中使用它,但它不起作用。我还听说过 scipy 中的一个名为 sio.loadmat 的函数 docs.scipy.org/doc/scipy/reference/tutorial/io.html 但我不确定这是否可以用于在 python 中实现。如果正确实现,我上面提到的方法会起作用吗?还是有其他方法来解决这个问题?

最佳答案

一个简短的答案是,这是可能的,但是,它并不轻松,因为您需要在 python 代码中重新创建网络的一部分(至少是用于预测的部分)。它仅适用于 numpyscipy,也可以使用 PyTorch/TensorFlow 重新创建以利用 GPU。

<小时/>

您提到的trainednet.mat可能存储了神经网络的权重,您需要根据原始模型(matlab中的模型)重新创建神经网络的架构,即执行python 中的矩阵计算。

正如您所提到的,您将首先通过 scipy 加载 .mat

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 库可能会更好。

<小时/>

简而言之,将相同的代码(神经网络架构中的代码)从 ma​​tlab 重新实现到 python 是可能的,但需要付出大量的努力。您可以引用this guide作为在 python 中转换 matlab 预训练网络的入门工具。

关于python - 是否可以将经过训练的 CNN 存储为 .mat 文件并使用该文件在 Python 中制定分类算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60254790/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com