2017年4月9日 多层神经网络真的能训练出一个非线性的判定边界

训练数据取自两个不同半径的圆

import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout
import numpy as np
from matplotlib.pyplot import plot
%matplotlib inline

data = [ [np.cos(d), np.sin(d), 1, 0] for d in np.linspace(0,np.pi*2)] + [ [np.cos(d)*2, np.sin(d)*2, 0, 1] for d in np.linspace(0,np.pi*2)]
X = np.array(data)[:, 0:2]
y = np.array(data)[:, 2]

plot(X[y==0][:,0], X[y==0][:,1], '.')
plot(X[y==1][:,0], X[y==1][:,1], '.')

144643_09Pc_1247620.png

训练模型是两层神经网络

model = Sequential()
model.add(Dense(4, activation='relu', input_shape=(2,)))
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='mean_squared_error', optimizer="SGD")

model.fit(X, y, epochs=2000, verbose=0)

训练得到的判定边界是个多边形,真的能分割两个圆

l = np.linspace(-2,2,num=100)

X_test = []
for i in range(len(l)):
    for j in range(len(l)):
        X_test.append([l[i], l[j]])
        
X_test = np.matrix(X_test)

p = model.predict(X_test).flatten()
p[p<.5] = 0
p[p>=.5] = 1

plot(X_test[p==0][:,0], X_test[p==0][:,1], '*')
plot(X_test[p==1][:,0], X_test[p==1][:,1], '*')

plot(X[y==0][:,0], X[y==0][:,1], '.')
plot(X[y==1][:,0], X[y==1][:,1], '.')

144840_bjto_1247620.png

转载于:https://my.oschina.net/airxiechao/blog/875625

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值