Skip to content

Commit 2a08603

Browse files
author
Ronan Collobert
committed
added GlobalStandardNormalizer class. changed names in StandardNormalizer class.
git-archimport-id: [email protected]/torch--devel--1.0--patch-71
1 parent 7f894e0 commit 2a08603

4 files changed

+176
-28
lines changed

datasets/T4GlobalStandardNormalizer.h

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#import "T4Object.h"
2+
#import "T4Matrix.h"
3+
4+
@interface T4GlobalStandardNormalizer : T4Object <NSCoding>
5+
{
6+
real mean;
7+
real standardDeviation;
8+
}
9+
10+
-initWithMean: (real)aMean standardDeviation: (real)aStandardDeviation;
11+
-initWithDataset: (NSArray*)aDataset columnIndex: (int)anIndex;
12+
-initWithDataset: (NSArray*)aDataset;
13+
14+
-normalizeDataset: (NSArray*)aDataset columnIndex: (int)anIndex;
15+
-normalizeDataset: (NSArray*)aDataset;
16+
-normalizeMatrix: (T4Matrix*)aMatrix;
17+
18+
-(real)mean;
19+
-(real)standardDeviation;
20+
21+
@end

datasets/T4GlobalStandardNormalizer.m

+127
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
#import "T4GlobalStandardNormalizer.h"
2+
3+
@implementation T4GlobalStandardNormalizer
4+
5+
-initWithMean: (real)aMean standardDeviation: (real)aStandardDeviation
6+
{
7+
if( (self = [super init]) )
8+
{
9+
mean = aMean;
10+
standardDeviation = aStandardDeviation;
11+
}
12+
13+
return self;
14+
}
15+
16+
-initWithDataset: (NSArray*)aDataset columnIndex: (int)anIndex
17+
{
18+
int numRows;
19+
int numExamples;
20+
int numTotal;
21+
real aMean;
22+
real aStandardDeviation;
23+
int r, c, e;
24+
25+
numExamples = [aDataset count];
26+
numRows = [[[aDataset objectAtIndex: 0] objectAtIndex: anIndex] numberOfRows];
27+
28+
aMean = 0;
29+
aStandardDeviation = 0;
30+
numTotal = 0;
31+
32+
for(e = 0; e < numExamples; e++)
33+
{
34+
T4Matrix *matrix = [[aDataset objectAtIndex: e] objectAtIndex: anIndex];
35+
int numColumns = [matrix numberOfColumns];
36+
37+
for(c = 0; c < numColumns; c++)
38+
{
39+
real *matrixColumn = [matrix columnAtIndex: c];
40+
for(r = 0; r < numRows; r++)
41+
{
42+
real z = matrixColumn[r];
43+
aMean += z;
44+
aStandardDeviation += z*z;
45+
}
46+
}
47+
48+
numTotal += numRows*numColumns;
49+
}
50+
51+
aMean /= (real)numTotal;
52+
aStandardDeviation /= (real)numTotal;
53+
aStandardDeviation -= aMean*aMean;
54+
aStandardDeviation = sqrt(aStandardDeviation);
55+
56+
return [self initWithMean: aMean standardDeviation: aStandardDeviation];
57+
}
58+
59+
-initWithDataset: (NSArray*)aDataset
60+
{
61+
return [self initWithDataset: aDataset columnIndex: 0];
62+
}
63+
64+
-normalizeDataset: (NSArray*)aDataset columnIndex: (int)anIndex
65+
{
66+
int numExamples = [aDataset count];
67+
int e;
68+
69+
for(e = 0; e < numExamples; e++)
70+
{
71+
T4Matrix *matrix = [[aDataset objectAtIndex: e] objectAtIndex: anIndex];
72+
[self normalizeMatrix: matrix];
73+
}
74+
return self;
75+
}
76+
77+
-normalizeDataset: (NSArray*)aDataset
78+
{
79+
return [self normalizeDataset: aDataset columnIndex: 0];
80+
}
81+
82+
-normalizeMatrix: (T4Matrix*)aMatrix
83+
{
84+
int numColumns = [aMatrix numberOfColumns];
85+
int numRows = [aMatrix numberOfRows];
86+
int r, c;
87+
88+
for(c = 0; c < numColumns; c++)
89+
{
90+
real *matrixColumn = [aMatrix columnAtIndex: c];
91+
for(r = 0; r < numRows; r++)
92+
{
93+
if(standardDeviation > 0)
94+
matrixColumn[r] = (matrixColumn[r] - mean) / standardDeviation;
95+
else
96+
matrixColumn[r] -= mean;
97+
}
98+
}
99+
return self;
100+
}
101+
102+
-(real)mean
103+
{
104+
return mean;
105+
}
106+
107+
-(real)standardDeviation
108+
{
109+
return standardDeviation;
110+
}
111+
112+
-initWithCoder: (NSCoder*)aCoder
113+
{
114+
self = [super initWithCoder: aCoder];
115+
[aCoder decodeValueOfObjCType: @encode(real) at: &mean];
116+
[aCoder decodeValueOfObjCType: @encode(real) at: &standardDeviation];
117+
return self;
118+
}
119+
120+
-(void)encodeWithCoder: (NSCoder*)aCoder
121+
{
122+
[super encodeWithCoder: aCoder];
123+
[aCoder encodeValueOfObjCType: @encode(real) at: &mean];
124+
[aCoder encodeValueOfObjCType: @encode(real) at: &standardDeviation];
125+
}
126+
127+
@end

datasets/T4StandardNormalizer.h

+5-5
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,19 @@
33

44
@interface T4StandardNormalizer : T4Object <NSCoding>
55
{
6-
T4Matrix *mean;
7-
T4Matrix *standardDeviation;
6+
T4Matrix *means;
7+
T4Matrix *standardDeviations;
88
}
99

10-
-initWithMean: (T4Matrix*)aMean standardDeviation: (T4Matrix*)aStandardDeviation;
10+
-initWithMeans: (T4Matrix*)someMeans standardDeviations: (T4Matrix*)someStandardDeviations;
1111
-initWithDataset: (NSArray*)aDataset columnIndex: (int)anIndex;
1212
-initWithDataset: (NSArray*)aDataset;
1313

1414
-normalizeDataset: (NSArray*)aDataset columnIndex: (int)anIndex;
1515
-normalizeDataset: (NSArray*)aDataset;
1616
-normalizeMatrix: (T4Matrix*)aMatrix;
1717

18-
-(T4Matrix*)mean;
19-
-(T4Matrix*)standardDeviation;
18+
-(T4Matrix*)means;
19+
-(T4Matrix*)standardDeviations;
2020

2121
@end

datasets/T4StandardNormalizer.m

+23-23
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22

33
@implementation T4StandardNormalizer
44

5-
-initWithMean: (T4Matrix*)aMean standardDeviation: (T4Matrix*)aStandardDeviation
5+
-initWithMeans: (T4Matrix*)someMeans standardDeviations: (T4Matrix*)someStandardDeviations
66
{
77
if( (self = [super init]) )
88
{
9-
if([aMean numberOfRows] != [aStandardDeviation numberOfRows])
9+
if([someMeans numberOfRows] != [someStandardDeviations numberOfRows])
1010
T4Error(@"StandardNormalizer: mean and standard deviation matrices do not match!!!");
1111

12-
mean = [aMean retainAndKeepWithAllocator: allocator];
13-
standardDeviation = [aStandardDeviation retainAndKeepWithAllocator: allocator];
12+
means = [someMeans retainAndKeepWithAllocator: allocator];
13+
standardDeviations = [someStandardDeviations retainAndKeepWithAllocator: allocator];
1414
}
1515

1616
return self;
@@ -21,20 +21,20 @@ @implementation T4StandardNormalizer
2121
int numRows;
2222
int numExamples;
2323
int totalNumColumns;
24-
T4Matrix *aMean;
25-
T4Matrix *aStandardDeviation;
24+
T4Matrix *someMeans;
25+
T4Matrix *someStandardDeviations;
2626
real *meanColumn;
2727
real *standardDeviationColumn;
2828
int r, c, e;
2929

3030
numExamples = [aDataset count];
3131
numRows = [[[aDataset objectAtIndex: 0] objectAtIndex: anIndex] numberOfRows];
32-
aMean = [[[T4Matrix alloc] initWithNumberOfRows: numRows] keepWithAllocator: allocator];
33-
aStandardDeviation = [[[T4Matrix alloc] initWithNumberOfRows: numRows] keepWithAllocator: allocator];
34-
meanColumn = [aMean firstColumn];
35-
standardDeviationColumn = [aStandardDeviation firstColumn];
36-
[aMean zero];
37-
[aStandardDeviation zero];
32+
someMeans = [[[T4Matrix alloc] initWithNumberOfRows: numRows] keepWithAllocator: allocator];
33+
someStandardDeviations = [[[T4Matrix alloc] initWithNumberOfRows: numRows] keepWithAllocator: allocator];
34+
meanColumn = [someMeans firstColumn];
35+
standardDeviationColumn = [someStandardDeviations firstColumn];
36+
[someMeans zero];
37+
[someStandardDeviations zero];
3838
totalNumColumns = 0;
3939

4040
for(e = 0; e < numExamples; e++)
@@ -64,7 +64,7 @@ @implementation T4StandardNormalizer
6464
standardDeviationColumn[r] = sqrt(standardDeviationColumn[r]);
6565
}
6666

67-
return [self initWithMean: aMean standardDeviation: aStandardDeviation];
67+
return [self initWithMeans: someMeans standardDeviations: someStandardDeviations];
6868
}
6969

7070
-initWithDataset: (NSArray*)aDataset
@@ -94,8 +94,8 @@ @implementation T4StandardNormalizer
9494
{
9595
int numColumns = [aMatrix numberOfColumns];
9696
int numRows = [aMatrix numberOfRows];
97-
real *meanColumn = [mean firstColumn];
98-
real *standardDeviationColumn = [standardDeviation firstColumn];
97+
real *meanColumn = [means firstColumn];
98+
real *standardDeviationColumn = [standardDeviations firstColumn];
9999
int r, c;
100100

101101
for(c = 0; c < numColumns; c++)
@@ -112,29 +112,29 @@ @implementation T4StandardNormalizer
112112
return self;
113113
}
114114

115-
-(T4Matrix*)mean
115+
-(T4Matrix*)means
116116
{
117-
return mean;
117+
return means;
118118
}
119119

120-
-(T4Matrix*)standardDeviation
120+
-(T4Matrix*)standardDeviations
121121
{
122-
return standardDeviation;
122+
return standardDeviations;
123123
}
124124

125125
-initWithCoder: (NSCoder*)aCoder
126126
{
127127
self = [super initWithCoder: aCoder];
128-
mean = [[aCoder decodeObject] retainAndKeepWithAllocator: allocator];
129-
standardDeviation = [[aCoder decodeObject] retainAndKeepWithAllocator: allocator];
128+
means = [[aCoder decodeObject] retainAndKeepWithAllocator: allocator];
129+
standardDeviations = [[aCoder decodeObject] retainAndKeepWithAllocator: allocator];
130130
return self;
131131
}
132132

133133
-(void)encodeWithCoder: (NSCoder*)aCoder
134134
{
135135
[super encodeWithCoder: aCoder];
136-
[aCoder encodeObject: mean];
137-
[aCoder encodeObject: standardDeviation];
136+
[aCoder encodeObject: means];
137+
[aCoder encodeObject: standardDeviations];
138138
}
139139

140140
@end

0 commit comments

Comments
 (0)