2016-03-29 30 views
0

Merhaba, yukarıdaki kodu çalıştırdığımda bu hatayı aldım. Hata nerede değil, kodlarım (.m) ve eğitim örnekleri aynı çalışma dizininde. fread
Geçersiz dosya tanıtıcısı kullanarakYayılma ve görüntü ayırıcısı kullanılarak hata oluştu

hata. Geçerli bir dosya tanıtıcısı oluşturmak için fopen kullanın.
MNISTParser içinde hata (satır 3)
magic_number = fread (fp, 1, 'uint32', 0, 'b');
MNIST_gen dosyasındaki hata (satır 2)
train_labels = MNISTParser ('./ MNIST/tren-etiketleri-idx1-ubyte');

MNIST_gen.m

clear 
**train_labels = MNISTParser('./MNIST/train-labels-idx1-ubyte');** 
train_images = MNISTParser('./MNIST/train-images-idx3-ubyte'); 
test_labels = MNISTParser('./MNIST/t10k-labels-idx1-ubyte'); 
test_images = MNISTParser('./MNIST/t10k-images-idx3-ubyte'); 
test_item_number = length(test_labels); 
train_item_number = length(train_labels); 
image_scale = size(test_images,2); 
test_images_unfold = reshape(test_images,test_item_number,image_scale^2)'; 
test_labels_unfold = full(ind2vec(test_labels'+1)); 
train_images_unfold = reshape(train_images,train_item_number,image_scale^2)'; 
train_labels_unfold = full(ind2vec(train_labels'+1)); 
save MNIST.mat; 

colormap(gray); 
axis off 
axis image 

%show an image of a digit in test samples 
for i=1:1 
    j=randi(length(test_labels),1); 
    image(reshape(255-test_images(j,:,:),28,28)); 
    title(sprintf('%d',test_labels(j))); 
    pause(1); 
    image(reshape(test_images_unfold(:,j),28,28)); 
    title(vec2ind(test_labels_unfold(:,j))-1); 
    pause(1); 
end  

%show an image of a digit in train samples 
for i=1:1 
    j=randi(length(train_labels),1); 
    image(reshape(255-train_images(j,:,:),28,28)); 
    title(sprintf('%d',train_labels(j))); 
    pause(1); 
    image(reshape(train_images_unfold(:,j),28,28)); 
    title(vec2ind(train_labels_unfold(:,j))-1); 
    pause(1); 
end 

MNISTParser.m

function res = MNISTParser(filename) 
    fp = fopen(filename,'r'); 
    **magic_number = fread(fp,1,'uint32',0,'b');** 
    items_number = fread(fp,1,'uint32',0,'b'); 
    if 2049==magic_number 
     res = fread(fp,items_number,'uint8',0,'b'); 
    else 
     if 2051==magic_number 
      img_rows = fread(fp,1,'uint32',0,'b'); 
      img_cols = fread(fp,1,'uint32',0,'b'); 
      res = zeros(items_number,img_rows,img_cols); 
      for i=1:items_number 
       res(i,:,:) = fread(fp,[img_cols,img_rows],'uint8',0,'b')'; 
      end 
     else 
      error('wrong magic number'); 
     end 
    end 
    fclose(fp); 

end 

Teşekkür

+0

'fp' değerini kontrol ettiniz mi? Eğitim numuneleriniz * aynı * klasörde mi yoksa dosya yolunuzda önerildiği gibi “MNIST” klasöründe mi? Bu dosyada okuma izniniz var mı? – beaker

cevap

0

l hatayı bulmanıza yardımcı için. dosyaların uzantısı ile ilgilidir. burada benim hatamı bulmama yardımcı olan talimattır [fp, msg] = fopen (dosya adı, 'r'); fp < 1 ise, hata ([msg 'Dosya:' dosyaadı]);