Python Opencv的神经网络的激活函数能自己设置吗?

试这用opencv的神经网络对iris做一个分类,得到输出结果的数值是介于-1到1之间的数字。
这是不是说明opencv默认的使用的激活函数是双曲正切函数?
我怎么样才能把opencv的神经网络的激活函数设置成为sigmoid函数呢?这个网络的有四个输入层,三个隐藏层,三个输出层

这是我写的代码:

#-*- coding: utf-8 -*-
import cv2
import numpy as np 
tmp = np.loadtxt("iris.csv", dtype=np.str, delimiter=",")
data = tmp[1:-1, 1:5]
data = data.astype(np.float32)
label = tmp[1:-1, 5]
Y = np.zeros([label.shape[0], 3])
Y[label=='"setosa"'] = np.array([1, 0, 0])
Y[label=='"versicolor"'] = np.array([0, 1, 0])
Y[label=='"virginica"'] = np.array([0, 0, 1])
layerSize = np.int32([4, 3, 3])
ann = cv2.ANN_MLP()
ann.create(layerSize)
ann.train(data, Y, None, None)
print data.shape, Y.shape
a = ann.predict(data)
print a
阅读 4.8k
1 个回答

set

enum ActivationFunctions { 
  IDENTITY = 0, 
  SIGMOID_SYM = 1, 
  GAUSSIAN = 2 
}

C++接口就是这样

Python接口应该也差不多

ann.setActivationFunction(1)

或者

ann.setActivationFunction(cv2.ml.ANN_MLP_SIGMOID_SYM)

应该就用上了

我的opencv版本和你貌似不太一样,我用如下代码:

ann = cv2.ml.ANN_MLP_create()
ann.setActivationFunction(cv2.ml.ANN_MLP_SIGMOID_SYM)

测试,可以运行

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题