快乐虾

http://blog.csdn.net/lights_joy/

欢迎转载,但请保留作者信息

在opencv中支持神经网络分类器。本文尝试在python中调用它。

和前面的贝叶斯分类器一样。神经网络也遵循先训练再使用的方式,我们直接在贝叶斯分类器的測试代码上做简单改动,完毕两类数据点的分类。

首先也是先创建训练用的数据:

# 训练的点数
train_pts = 30 # 创建測试的数据点,2类
# 以(-1.5, -1.5)为中心
rand1 = np.ones((train_pts,2)) * (-2) + np.random.rand(train_pts, 2)
print('rand1:')
print(rand1) # 以(1.5, 1.5)为中心
rand2 = np.ones((train_pts,2)) + np.random.rand(train_pts, 2)
print('rand2:')
print(rand2) # 合并随机点,得到训练数据
train_data = np.vstack((rand1, rand2))
train_data = np.array(train_data, dtype='float32')
train_label = np.vstack( (np.zeros((train_pts,1), dtype='float32'), np.ones((train_pts,1), dtype='float32'))) # 显示训练数据
plt.figure(1)
plt.plot(rand1[:,0], rand1[:,1], 'o')
plt.plot(rand2[:,0], rand2[:,1], 'o')

相似这种数据:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

在得到训练数据后,接着创建一个网络并配置训练參数:

# 创建网络
ann = cv2.ml.ANN_MLP_create()
ann.setLayerSizes(np.array([2, 10, 10, 1])) # 必须首先运行此行
ann.setActivationFunction(cv2.ml.ANN_MLP_SIGMOID_SYM)
ann.setTrainMethod(cv2.ml.ANN_MLP_BACKPROP)
ann.setBackpropWeightScale(0.1)
ann.setBackpropMomentumScale(0.1)

因为我们的输入是数据点的坐标值,输出是此数据点所属的类别。因此这个网络的输入层有2个节点,输出则仅仅有一个节点。中间有两个隐层。各有10个节点。

接着我们对此网络进行训练:

# 训练
ret = ann.train(train_data, cv2.ml.ROW_SAMPLE, train_label)

在训练完毕后就能够使用測试数据进行预測了:

# 測试数据,20个点[-2,2]
pt = np.array(np.random.rand(20,2) * 4 - 2, dtype='float32')
(ret, res) = ann.predict(pt)

predict通过res返回得到一个20x1的数组,每一行相应一个输入点。因为我们选择sigmoid做为激活函数。因此计算得到的值是一个介于[0,1]之间的浮点数,我们取0.5为阈值进行分类并显示结果:

# 按label进行分类显示
plt.figure(2)
res = np.hstack((res, res)) # 第一类
type_data = pt[res < 0.5]
type_data = np.reshape(type_data, (type_data.shape[0] / 2, 2))
plt.plot(type_data[:,0], type_data[:,1], 'o') # 第二类
type_data = pt[res >= 0.5]
type_data = np.reshape(type_data, (type_data.shape[0] / 2, 2))
plt.plot(type_data[:,0], type_data[:,1], 'o')

看看最后的结果:



最新文章

  1. for..in遍历,枚举器
  2. 随笔SublimeText Theme安装
  3. Codeforces Round #228 (Div. 2) B. Fox and Cross
  4. Drainage Ditches(dinic)
  5. codeforces Gym 100500 J. Bye Bye Russia
  6. C++ 读取 pcap文件.
  7. Java 线程池详细介绍
  8. 有N个正实数(注意是实数,大小升序排列) x1 , x2 ... xN,另有一个实数M。 需要选出若干个x,使这几个x的和与 M 最接近。 请描述实现算法,并指出算法复杂度
  9. [Reinforcement Learning] Policy Gradient Methods
  10. mysql学习笔记--表操作
  11. bzoj1040 骑士
  12. 对IT技术开发职业生涯的思考
  13. 101 个 MySQL 的调节和优化的提示
  14. 浅谈 PHP Yaf 开启session之后对响应头的影响
  15. Django项目启动之前执行流程剖析
  16. Same Tree leetcode java
  17. hbase RowFilter如何根据rowkey查询以及实例实现代码 habase模糊查询【转】
  18. MySQL5.7多源复制
  19. NodeJS学习笔记五
  20. LFS搭建第一天补充

热门文章

  1. HDU 4667 Building Fence(2013多校7 1002题 计算几何,凸包,圆和三角形)
  2. Spring JdbcTemplate查询实例
  3. [前端]使用JQuery UI Layout Plug-in布局
  4. SharePoint 2013 代码创建应用程序目录(App Catalog)
  5. 有用的iOS网站地址
  6. Python的__getattribute__ vs __getattr__的妙用
  7. EasyUI datagrid 明细表格中编辑框 事件绑定 及灵活计算 可根据此思路 扩展其他
  8. 搜索引擎爬虫蜘蛛的useragent
  9. ftm时钟源
  10. 修改ubuntu下网卡名不是eth0的问题