不能从simulink调用loadMNISTImages函数时使用'machineformat'输入参数

时间:2019-07-16 16:31:05

标签: image matlab conv-neural-network simulink stateflow

我正在调用对MNIST图像进行分类的简单CNN。 CNN内部调用loadMNISTImages()函数从文件中读取图像。当此CNN连接到我的Simulink模型时。

我遇到以下错误:

  

对于代码生成,您不能使用“ machineformat”输入   论点。函数'loadMNISTImages.m'(#77.233.262),第8行,列   9:“ fread(fp,1,'int32',0,'b')”启动诊断报告。

这是读取MNIST图像的功能:

 function images = loadMNISTImages(filename)

 %loadMNISTImages returns a 28x28x[number of MNIST images] matrix 
 %containing the raw MNIST images

 fp = fopen(filename, 'rb');
 assert(fp ~= -1, ['Could not open ', filename, '']);

 magic = fread(fp, 1, 'int32', 0, 'b');
 assert(magic == 2051, ['Bad magic number in ', filename, '']);

 numImages = fread(fp, 1, 'int32', 0, 'ieee-be');
 numRows = fread(fp, 1, 'int32', 0, 'ieee-be');
 numCols = fread(fp, 1, 'int32', 0, 'ieee-be');

 images = fread(fp, inf, 'unsigned char=>unsigned char');
 images = reshape(images, numCols, numRows, numImages);
 images = permute(images,[2 1 3]);

 fclose(fp);

 % Reshape to #pixels x #examples
 images = reshape(images, size(images, 1) * size(images, 2), size(images, 3));
 % Convert to double and rescale to [0,1]
 images = double(images) / 255;

 end

从函数TestMNISTCONV调用上述函数

 function y2 = TestMnistConv()

 Images = 
 loadMNISTImages('C:\Users\surinder\Downloads\experiments\cnn\MNIST\t10k-images.idx3-ubyte');
 Images = reshape(Images, 28, 28, []);
 Labels = 
 loadMNISTLabels('C:\Users\surinder\Downloads\experiments\cnn\MNIST\t10k- 
 labels.idx1-ubyte');
 Labels(Labels == 0) = 10;    % 0 --> 10

最后,我从Stateflow图表中的状态调用此函数,因此得到此错误。任何人都可以帮忙吗?:)

1 个答案:

答案 0 :(得分:0)

任何无法转换为等效C代码的函数都必须定义为coder.extrinsic

您需要使用coder.extrinsic('loadMNISTImages');

您还可能会遇到与变量大小有关的问题。 Simulink / Stateflow几乎肯定会不允许您即时更改Images的尺寸-您可能需要将reshape移到loadMNISTImages中,并且需要预先定义大小ImagesLabels的使用类似

Images = zeros(28,28,...);