From 1b5e6d8855064e5d990bd73f1f3a0aa00cbdfb4c Mon Sep 17 00:00:00 2001
From: Joseph Redmon <pjreddie@gmail.com>
Date: Sat, 01 Mar 2014 22:41:30 +0000
Subject: [PATCH] Flipping features now a flag

---
 src/data.c |   47 ++++++++++++++++++++++++++++-------------------
 1 files changed, 28 insertions(+), 19 deletions(-)

diff --git a/src/data.c b/src/data.c
index 0b396d7..f44f5da 100644
--- a/src/data.c
+++ b/src/data.c
@@ -1,5 +1,4 @@
 #include "data.h"
-#include "list.h"
 #include "utils.h"
 #include "image.h"
 
@@ -11,6 +10,7 @@
 {
     char *path;
     FILE *file = fopen(filename, "r");
+    if(!file) file_error(filename);
     list *lines = make_list();
     while((path=fgetl(file))){
         list_insert(lines, path);
@@ -19,10 +19,10 @@
     return lines;
 }
 
-void fill_truth(char *path, char **labels, int k, double *truth)
+void fill_truth(char *path, char **labels, int k, float *truth)
 {
     int i;
-    memset(truth, 0, k*sizeof(double));
+    memset(truth, 0, k*sizeof(float));
     for(i = 0; i < k; ++i){
         if(strstr(path, labels[i])){
             truth[i] = 1;
@@ -30,17 +30,17 @@
     }
 }
 
-data load_data_image_paths(char **paths, int n, char **labels, int k)
+data load_data_image_paths(char **paths, int n, char **labels, int k, int h, int w)
 {
     int i;
     data d;
     d.shallow = 0;
     d.X.rows = n;
-    d.X.vals = calloc(d.X.rows, sizeof(double*));
+    d.X.vals = calloc(d.X.rows, sizeof(float*));
     d.y = make_matrix(n, k);
 
     for(i = 0; i < n; ++i){
-        image im = load_image(paths[i]);
+        image im = load_image(paths[i], h, w);
         d.X.vals[i] = im.data;
         d.X.cols = im.h*im.w*im.c;
         fill_truth(paths[i], labels, k, d.y.vals[i]);
@@ -48,11 +48,11 @@
     return d;
 }
 
-data load_data_image_pathfile(char *filename, char **labels, int k)
+data load_data_image_pathfile(char *filename, char **labels, int k, int h, int w)
 {
     list *plist = get_paths(filename);
     char **paths = (char **)list_to_array(plist);
-    data d = load_data_image_paths(paths, plist->size, labels, k);
+    data d = load_data_image_paths(paths, plist->size, labels, k, h, w);
     free_list_contents(plist);
     free_list(plist);
     free(paths);
@@ -70,20 +70,20 @@
     }
 }
 
-data load_data_image_pathfile_part(char *filename, int part, int total, char **labels, int k)
+data load_data_image_pathfile_part(char *filename, int part, int total, char **labels, int k, int h, int w)
 {
     list *plist = get_paths(filename);
     char **paths = (char **)list_to_array(plist);
     int start = part*plist->size/total;
     int end = (part+1)*plist->size/total;
-    data d = load_data_image_paths(paths+start, end-start, labels, k);
+    data d = load_data_image_paths(paths+start, end-start, labels, k, h, w);
     free_list_contents(plist);
     free_list(plist);
     free(paths);
     return d;
 }
 
-data load_data_image_pathfile_random(char *filename, int n, char **labels, int k)
+data load_data_image_pathfile_random(char *filename, int n, char **labels, int k, int h, int w)
 {
     int i;
     list *plist = get_paths(filename);
@@ -92,8 +92,9 @@
     for(i = 0; i < n; ++i){
         int index = rand()%plist->size;
         random_paths[i] = paths[index];
+        if(i == 0) printf("%s\n", paths[index]);
     }
-    data d = load_data_image_paths(random_paths, n, labels, k);
+    data d = load_data_image_paths(random_paths, n, labels, k, h, w);
     free_list_contents(plist);
     free_list(plist);
     free(paths);
@@ -106,8 +107,8 @@
     data d;
     d.shallow = 0;
     matrix X = csv_to_matrix(filename);
-    double *truth_1d = pop_column(&X, target);
-    double **truth = one_hot_encode(truth_1d, X.rows, k);
+    float *truth_1d = pop_column(&X, target);
+    float **truth = one_hot_encode(truth_1d, X.rows, k);
     matrix y;
     y.rows = X.rows;
     y.cols = k;
@@ -123,7 +124,7 @@
     int i;
     for(i = d.X.rows-1; i > 0; --i){
         int index = rand()%i;
-        double *swap = d.X.vals[index];
+        float *swap = d.X.vals[index];
         d.X.vals[index] = d.X.vals[i];
         d.X.vals[i] = swap;
 
@@ -133,6 +134,14 @@
     }
 }
 
+void scale_data_rows(data d, float s)
+{
+    int i;
+    for(i = 0; i < d.X.rows; ++i){
+        scale_array(d.X.vals[i], d.X.cols, s);
+    }
+}
+
 void normalize_data_rows(data d)
 {
     int i;
@@ -156,10 +165,10 @@
     train.X.cols = test.X.cols = d.X.cols;
     train.y.cols = test.y.cols = d.y.cols;
 
-    train.X.vals = calloc(train.X.rows, sizeof(double*));
-    test.X.vals = calloc(test.X.rows, sizeof(double*));
-    train.y.vals = calloc(train.y.rows, sizeof(double*));
-    test.y.vals = calloc(test.y.rows, sizeof(double*));
+    train.X.vals = calloc(train.X.rows, sizeof(float*));
+    test.X.vals = calloc(test.X.rows, sizeof(float*));
+    train.y.vals = calloc(train.y.rows, sizeof(float*));
+    test.y.vals = calloc(test.y.rows, sizeof(float*));
 
     for(i = 0; i < start; ++i){
         train.X.vals[i] = d.X.vals[i];

--
Gitblit v1.10.0