def my_data(self): # load training data train_images = util.np.load( os.path.join(self.args.data_dir, 'fmnist_train_data.npy')) train_labels = util.np.load( os.path.join(self.args.data_dir, 'fmnist_train_labels.npy')) train_labels = tf.Session().run(tf.one_hot(train_labels, 10)) # normalize data train_images = train_images / 255 # set up test set test_images, train_images = util.split_data(train_images, self.test_set_size) test_labels, train_labels = util.split_data(train_labels, self.test_set_size) # set up validation set train_images, train_labels = util.shuffler(train_images, train_labels) validation_images, train_images = util.split_data( train_images, self.validation_set_size) validation_labels, train_labels = util.split_data( train_labels, self.validation_set_size) data = { "train_images": train_images, "train_labels": train_labels, "test_images": test_images, "test_labels": test_labels, "validation_images": validation_images, "validation_labels": validation_labels } return data
def my_data(self): # load training data train_images = util.np.load( os.path.join(self.args.data_dir, 'cifar_images.npy')) # normalize data train_images = train_images / 255 # reshape to fit input tensor train_images = np.reshape( train_images, [-1, 32, 32, 3 ]) # `-1` means "everything not otherwise accounted for" # load training labels train_labels = util.np.load( os.path.join(self.args.data_dir, 'cifar_labels.npy')) train_images, train_labels = util.shuffler(train_images, train_labels) # convert labels to one-hots train_labels = tf.Session().run(tf.one_hot(train_labels, 100)) # set up test set test_images, train_images = util.split_data(train_images, self.test_set_size) test_labels, train_labels = util.split_data(train_labels, self.test_set_size) # set up validation set validation_images, train_images = util.split_data( train_images, self.validation_set_size) validation_labels, train_labels = util.split_data( train_labels, self.validation_set_size) data = { "train_images": train_images, "train_labels": train_labels, "test_images": test_images, "test_labels": test_labels, "validation_images": validation_images, "validation_labels": validation_labels } return data
def train_classifier(ae_path_prefix): tf.reset_default_graph() params = { 'path_prefix': ae_path_prefix, "starter_learning_rate": .001, "reduction_rate": 0.70, "reg_scale": 0.0001, "batch_size": 128, } m = model.Model(params) # split into train, validation, and test train_im_num = m.train_images.shape[0] test_im_num = m.test_images.shape[0] val_im_num = m.validation_images.shape[0] mean_cross_entropy = tf.reduce_mean(m.cross_entropy) # Define network operations network_train_op = m.network_train_op() confusion_matrix_op = m.confusion_matrix_op() batch_size = m.batch_size with tf.Session() as session: session.run(tf.global_variables_initializer()) best_val_ce = sys.maxsize counter = 0 avg_val_cs = 0 for epoch in range(m.epochs): print('Epoch: ' + str(epoch)) # shuffle data each epoch before training train_images, train_labels = util.shuffler(m.train_images, m.train_labels) # run gradient steps and report mean loss on train data ce_vals = [] for i in range(train_im_num // batch_size): batch_xs = train_images[i * batch_size:(i + 1) * batch_size, :] batch_ys = np.squeeze(train_labels[i * batch_size:(i + 1) * batch_size, :]) _, train_ce = session.run( [network_train_op, mean_cross_entropy], { m.ae_x: batch_xs, m.y: batch_ys }) ce_vals.append(train_ce) avg_train_ce = sum(ce_vals) / len(ce_vals) print('TRAIN CROSS ENTROPY: ' + str(avg_train_ce)) # report mean validation loss ce_vals = [] conf_mxs = [] for i in range(val_im_num // batch_size): batch_xs = m.validation_images[i * batch_size:(i + 1) * batch_size, :] batch_ys = np.squeeze(m.validation_labels[i * batch_size:(i + 1) * batch_size, :]) val_ce, conf_matrix = session.run( [mean_cross_entropy, confusion_matrix_op], { m.ae_x: batch_xs, m.y: batch_ys }) ce_vals.append(val_ce) conf_mxs.append(conf_matrix) avg_val_ce = sum(ce_vals) / len(ce_vals) print('VALIDATION CROSS ENTROPY: ' + str(avg_val_ce)) print('VALIDATION ACCURACY: ' + str(sum(sum(conf_mxs).diagonal()) / val_im_num)) print('VALIDATION CONFUSION MATRIX:') print(str(sum(conf_mxs))) # report mean test loss ce_vals = [] conf_mxs = [] for i in range(test_im_num // batch_size): batch_xs = m.test_images[i * batch_size:(i + 1) * batch_size, :] batch_ys = np.squeeze(m.test_labels[i * batch_size:(i + 1) * batch_size, :]) test_ce, conf_matrix = session.run( [mean_cross_entropy, confusion_matrix_op], { m.ae_x: batch_xs, m.y: batch_ys }) ce_vals.append(test_ce) conf_mxs.append(conf_matrix) avg_test_ce = sum(ce_vals) / len(ce_vals) print('TEST CROSS ENTROPY: ' + str(avg_test_ce)) print('TEST ACCURACY: ' + str(sum(sum(conf_mxs).diagonal()) / test_im_num)) if avg_val_ce > best_val_ce: counter += 1 elif avg_val_ce < best_val_ce: best_val_ce = avg_val_ce counter = 0 if counter > m.early_stopping: break path_prefix = m.saver.save( session, os.path.join(m.args.model_dir, "homework_2"), global_step=m.global_step_tensor)
train_op = m.train_op() confusion_matrix_op = m.confusion_matrix_op() with tf.Session() as session: session.run(tf.global_variables_initializer()) best_val_ce = sys.maxsize counter = 0 avg_val_cs = 0 batch_size = m.batch_size for epoch in range(m.epochs): print('Epoch: ' + str(epoch)) # shuffle data each epoch before training train_images, train_labels = util.shuffler(m.train_images, m.train_labels) # run gradient steps and report mean loss on train data ce_vals = [] for i in range(train_im_num // batch_size): batch_xs = train_images[i * batch_size:(i + 1) * batch_size, :] batch_ys = train_labels[i * batch_size:(i + 1) * batch_size, :] _, train_ce = session.run([train_op, mean_cross_entropy], { m.x: batch_xs, m.y: batch_ys }) ce_vals.append(train_ce) avg_train_ce = sum(ce_vals) / len(ce_vals) print('TRAIN CROSS ENTROPY: ' + str(avg_train_ce)) # report mean validation loss