Sha256: d5b787abf4c2915f5fba1cd9ba73a0a8735717fed972547cb3a37f530704397d

Contents?: true

Size: 1.77 KB

Versions: 9

Compression:

Stored size: 1.77 KB

Contents

require "zlib"
require "archive/tar/minitar"
require_relative "../../../ext/cifar_loader/cifar_loader"
require_relative "downloader"

URL_CIFAR100 = "https://www.cs.toronto.edu/~kriz/cifar-100-binary.tar.gz"
DIR_CIFAR100 = "cifar-100-binary"

module DNN
  module CIFAR100
    class DNN_CIFAR100_LoadError < DNN_Error; end

    def self.downloads
      return if Dir.exist?(DOWNLOADS_PATH + "/downloads/" + DIR_CIFAR100)
      Downloader.download(URL_CIFAR100)
      cifar100_binary_file_name = DOWNLOADS_PATH + "/downloads/" + URL_CIFAR100.match(%r`.+/(.+)`)[1]
      begin
        Zlib::GzipReader.open(cifar100_binary_file_name) do |gz|
          Archive::Tar::Minitar.unpack(gz, DOWNLOADS_PATH + "/downloads")
        end
      ensure
        File.unlink(cifar100_binary_file_name)
      end
    end

    def self.load_train
      downloads
      bin = ""
      fname = DOWNLOADS_PATH + "/downloads/#{DIR_CIFAR100}/train.bin"
      raise DNN_CIFAR100_LoadError.new(%`file "#{fname}" is not found.`) unless File.exist?(fname)
      bin << File.binread(fname)
      x_bin, y_bin = CIFAR100.load_binary(bin, 50000)
      x_train = Numo::UInt8.from_binary(x_bin).reshape(50000, 3, 32, 32).transpose(0, 2, 3, 1).clone
      y_train = Numo::UInt8.from_binary(y_bin).reshape(50000, 2)
      [x_train, y_train]
    end

    def self.load_test
      downloads
      fname = DOWNLOADS_PATH + "/downloads/#{DIR_CIFAR100}/test.bin"
      raise DNN_CIFAR100_LoadError.new(%`file "#{fname}" is not found.`) unless File.exist?(fname)
      bin = File.binread(fname)
      x_bin, y_bin = CIFAR100.load_binary(bin, 10000)
      x_test = Numo::UInt8.from_binary(x_bin).reshape(10000, 3, 32, 32).transpose(0, 2, 3, 1).clone
      y_test = Numo::UInt8.from_binary(y_bin).reshape(10000, 2)
      [x_test, y_test]
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
ruby-dnn-0.15.3 lib/dnn/datasets/cifar100.rb
ruby-dnn-0.15.2 lib/dnn/datasets/cifar100.rb
ruby-dnn-0.15.1 lib/dnn/datasets/cifar100.rb
ruby-dnn-0.15.0 lib/dnn/datasets/cifar100.rb
ruby-dnn-0.14.3 lib/dnn/datasets/cifar100.rb
ruby-dnn-0.14.2 lib/dnn/datasets/cifar100.rb
ruby-dnn-0.14.1 lib/dnn/datasets/cifar100.rb
ruby-dnn-0.14.0 lib/dnn/datasets/cifar100.rb
ruby-dnn-0.13.4 lib/dnn/datasets/cifar100.rb