20190908 Keras试用

尝试了二元线性回归。

只有代码和注释。

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
import keras
from keras.models import Sequential
from keras.layers import Dense
import numpy as np

#期望平面z=-6x+y+8
trX = np.random.uniform(-100, 100, size=1001)
trY = np.random.uniform(-100, 100, size=1001)
trZ = 8 - 6 * trX + trY + np.random.randn(*trX.shape) * 0.2
trXY = np.array(list(zip(trX,trY)))

model = Sequential()
#模型实现输入[x,y],输出对应的z,属于2个输入决定一个输出,所以
#第一层Dense的input_dim=2
#最后一层Dense的output_dim=1
model.add(Dense(input_dim=2, output_dim=200, init='uniform', activation='linear'))
model.add(Dense(input_dim=200, output_dim=1, init='uniform', activation='linear'))

model.compile(optimizer='adam', loss='mse')

model.fit(trXY, trZ, nb_epoch=200, verbose=1)

testX = [3,4,0]
testY = [1,0,4]
testXY = np.array(list(zip(testX,testY)))
res = model.predict(testXY)
print(testXY)
print(res)

关于zip()方法
设有

1
2
3
>>> a=[1,4,7]
>>> b=[2,5,8]
>>> c=[3,6,9]

则有以下结果:

1
2
3
4
5
6
7
8
>>> d=zip(a,b,c)
>>> d
<zip object at 0x0000019C55381848>
>>> list(d)
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]
>>> d=[list(i) for i in zip(a,b,c)]
>>> d
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

可见zip()方法的参数列表是可变参数列表,可以传入n个参数

--It's the end.Thanks for your read.--