Repository navigation
Expand file tree
/
Copy pathdataset_reader.rb
More file actions
50 lines (39 loc) · 1.69 KB
/
Copy pathdataset_reader.rb
File metadata and controls
50 lines (39 loc) · 1.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# Dataset reader helper to read datasets in the format described: http://yann.lecun.com/exdb/mnist/
class DatasetReader
def self.read_labels file
labels = []
File.open(file) do |f|
magic_number = f.read(4).unpack("l>").first # Unpack first 4 bytes into integer big endian
number_of_labels = f.read(4).unpack("l>").first # Unpack next 4 bytes into integer big endian
1.upto(number_of_labels) do |n| # For each label
labels.push f.read(1).unpack("c").first # Unpack byte and return as byte
end
end
return labels
end
def self.read_images file
images = []
rows, columns = nil
File.open(file) do |f|
magic_number = f.read(4).unpack("l>").first # Unpack first 4 bytes into integer big endian
number_of_images = f.read(4).unpack("l>").first # Unpack next 4 bytes into integer big endian
rows = f.read(4).unpack("l>").first # Unpack next 4 bytes into integer big endian
columns = f.read(4).unpack("l>").first # Unpack next 4 bytes into integer big endian
1.upto(number_of_images) do |n| # For each image
image_data = f.read(rows*columns).unpack("C*")
images.push image_data
end
end
return images
end
def self.read_rows_columns file
rows, columns = nil
File.open(file) do |f|
magic_number = f.read(4).unpack("l>").first # Unpack first 4 bytes into integer big endian
number_of_images = f.read(4).unpack("l>").first # Unpack next 4 bytes into integer big endian
rows = f.read(4).unpack("l>").first # Unpack next 4 bytes into integer big endian
columns = f.read(4).unpack("l>").first # Unpack next 4 bytes into integer big endian
end
return rows, columns
end
end