我正在调用对MNIST图像进行分类的简单CNN。 CNN内部调用loadMNISTImages()函数从文件中读取图像。当此CNN连接到我的Simulink模型时。
我遇到以下错误:
对于代码生成,您不能使用“ machineformat”输入 论点。函数'loadMNISTImages.m'(#77.233.262),第8行,列 9:“ fread(fp,1,'int32',0,'b')”启动诊断报告。
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
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图表中的状态调用此函数,因此得到此错误。任何人都可以帮忙吗?:)
答案 0 :(得分:0)
任何无法转换为等效C代码的函数都必须定义为coder.extrinsic
您需要使用coder.extrinsic('loadMNISTImages');
。
您还可能会遇到与变量大小有关的问题。 Simulink / Stateflow几乎肯定会不允许您即时更改Images
的尺寸-您可能需要将reshape
移到loadMNISTImages
中,并且需要预先定义大小Images
和Labels
的使用类似
Images = zeros(28,28,...);