-
Notifications
You must be signed in to change notification settings - Fork 3
/
readmlpwts.m
65 lines (61 loc) · 2.08 KB
/
readmlpwts.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
function [IH,HO,HB,OB] = readmlpwts(NAME,I,H,O)
% [IH,HO,HB,OB] = readmlpwts(NAME,I,H,O) Read a text-format MLP3 file
% NAME is the name of a 3-layer perceptron ascii weights file, of the
% kind written and read by qnstrn, qnsfwd etc. Its geometry is
% I input nodes, H hidden nodes and O output nodes. Return 4 matrices:
% IH are the input-to-hidden weights, with one column per hidden unit.
% HO are the hidden-to-output weights, with one *row* per hidden unit.
% HB and OB are the bias vectors for the hidden and output layers
% respectively.
% 1998apr29 dpwe@icsi.berkeley.edu
fid = fopen(NAME, 'r');
if (fid == -1)
error(['unable to read ', NAME]);
end
%% close the file when we exit (however we exit)
%onCleanup(@()fclose(fid));
% read the file
s = fscanf(fid, '%8s', 1);
if(s~='weigvec')
error(['header of "',s,'" is not "weigvec" - invalid format']);
end
ihsize = fscanf(fid, '%d', 1);
if ihsize ~= I*H
error(['input-hidden size of ',num2str(ihsize),' is not I(',num2str(I),')xH(',num2str(H),')']);
end
IH = zeros(I,H);
IH = fscanf(fid, '%f', [I,H]);
% Now read 2nd weigvec
s = fscanf(fid, '%8s', 1);
%fprintf(1, 's2 = "%s"\n', s);
if(s~='weigvec')
error(['2nd header of "',s,'" is not "weigvec" - invalid format']);
end
hosize = fscanf(fid, '%d', 1);
if hosize ~= H*O
error(['hidden-output size of ',num2str(hosize),' is not H(',num2str(H),')xO(',num2str(O),')']);
end
HO = zeros(H,O);
HO = fscanf(fid, '%f', [H,O]);
% Now read biasvecs
s = fscanf(fid, '%8s', 1);
if(s~='biasvec')
error(['1st bias header of "',s,'" is not "biasvec" - invalid format']);
end
hbsize = fscanf(fid, '%d', 1);
if hbsize ~= H
error(['hidden bias size of ',num2str(hbsize),' is not H(',num2str(H),')']);
end
HB = fscanf(fid, '%f', hbsize);
% Finally, second biasvec
s = fscanf(fid, '%8s', 1);
if(s~='biasvec')
error(['2nd bias header of "',s,'" is not "biasvec" - invalid format']);
end
obsize = fscanf(fid, '%d', 1);
if obsize ~= O
error(['output bias size of ',num2str(obsize),' is not O(',num2str(O),')']);
end
OB = fscanf(fid, '%f', obsize);
fclose(fid);
%% now achieved by onCleanup