-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathaddition.py
78 lines (65 loc) · 1.93 KB
/
addition.py
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
66
67
68
69
70
71
72
73
74
75
76
77
78
import numpy as np
import random
import chainer
import chainer.links as L
import chainer.functions as F
from chainer import Variable, optimizers, Chain, datasets
class FCNN(Chain):
def __init__(self):
super().__init__()
with self.init_scope():
self.l1 = L.Linear(2,50)
self.l2 = L.Linear(50,50)
self.l3 = L.Linear(50,1)
def __call__(self,x):
h = F.relu(self.l1(x))
h = F.relu(self.l2(h))
h = self.l3(h)
return h
def generate_data(number_of_data):
d1 = []
d2 = []
for i in range(number_of_data):
val1 = random.uniform(-50,50)
val2 = random.uniform(-50,50)
d1.append([val1, val2])
d2.append([val1+val2])
return np.array(d1,dtype=np.float32),np.array(d2,dtype=np.float32)
def main():
number_of_data = 1000
max_epoch = 20
batchsize = 100
train_ratio = 0.8
slice_position = int(number_of_data * train_ratio)
data_input, data_output = generate_data(number_of_data)
train_input = data_input[:slice_position]
train_output = data_output[:slice_position]
train_input = Variable(train_input)
train_output = Variable(train_output)
test_input = data_input[slice_position:]
test_output = data_output[slice_position:]
test_input = Variable(test_input)
test_output = Variable(test_output)
model = FCNN()
optimizer = optimizers.MomentumSGD(lr=0.0001, momentum=0.9)
optimizer.setup(model)
#Train
N = len(train_input)
perm = np.random.permutation(N)
for epoch in range(max_epoch):
for i in range(0,N,batchsize):
train_input_batch = train_input[perm[i:i + batchsize]]
train_output_batch = train_output[perm[i:i + batchsize]]
model.cleargrads()
t = model(train_input_batch)
loss = F.mean_squared_error(t,train_output_batch)
loss.backward()
optimizer.update()
print("epoch:",epoch,"loss",loss.data)
#Test
print(model(Variable(np.array([[14,-2]],dtype=np.float32))).array)
t = model(test_input)
loss = F.mean_squared_error(t,test_output)
print("loss:",loss.data)
if __name__ == "__main__":
main()