# Copyright 2017 Google Inc. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================== """Library of datasets for REBAR.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function import random import os import scipy.io import numpy as np import cPickle as pickle import tensorflow as tf import config gfile = tf.gfile def load_data(hparams): # Load data if hparams.task in ['sbn', 'sp']: reader = read_MNIST elif hparams.task == 'omni': reader = read_omniglot x_train, x_valid, x_test = reader(binarize=not hparams.dynamic_b) return x_train, x_valid, x_test def read_MNIST(binarize=False): """Reads in MNIST images. Args: binarize: whether to use the fixed binarization Returns: x_train: 50k training images x_valid: 10k validation images x_test: 10k test images """ with gfile.FastGFile(os.path.join(config.DATA_DIR, config.MNIST_BINARIZED), 'r') as f: (x_train, _), (x_valid, _), (x_test, _) = pickle.load(f) if not binarize: with gfile.FastGFile(os.path.join(config.DATA_DIR, config.MNIST_FLOAT), 'r') as f: x_train = np.load(f).reshape(-1, 784) return x_train, x_valid, x_test def read_omniglot(binarize=False): """Reads in Omniglot images. Args: binarize: whether to use the fixed binarization Returns: x_train: training images x_valid: validation images x_test: test images """ n_validation=1345 def reshape_data(data): return data.reshape((-1, 28, 28)).reshape((-1, 28*28), order='fortran') omni_raw = scipy.io.loadmat(os.path.join(config.DATA_DIR, config.OMNIGLOT)) train_data = reshape_data(omni_raw['data'].T.astype('float32')) test_data = reshape_data(omni_raw['testdata'].T.astype('float32')) # Binarize the data with a fixed seed if binarize: np.random.seed(5) train_data = (np.random.rand(*train_data.shape) < train_data).astype(float) test_data = (np.random.rand(*test_data.shape) < test_data).astype(float) shuffle_seed = 123 permutation = np.random.RandomState(seed=shuffle_seed).permutation(train_data.shape[0]) train_data = train_data[permutation] x_train = train_data[:-n_validation] x_valid = train_data[-n_validation:] x_test = test_data return x_train, x_valid, x_test