php赋值权重_php权重计算方法代码分享

/* vim: set expandtab tabstop=4 shiftwidth=4: */

// +------------------------------------------------------------------------

//  Name       :   权重计算

//  Description:   稍加修改,亦可用于分词,词频统计,全文检索和垃圾检测

//  Date       :   2013/12/16 08:51

class weight {

protected $aDict = array(array());

protected $aItems = array();

protected $sLastRule;

protected $aMatchs = array();

protected $aShow = array();

private function init() {

//清空记录的匹配表和输出结果

unset($this->aShow);

}

public function newItems($mItems) {

//导入新的项目

$this->aItems = (is_array($mItems))? $mItems: array($mItems);

$this->init();

}

public function newTable(array $aTable) {

//导入新的对照表,并生成字典

foreach($aTable as $iTableKey=>$sTableLine) {

$aTableLine = explode(',', str_replace('|', ',', $sTableLine));

$setter = function($v, $k, $paraMeter) {

$k1 = $paraMeter[0]; $oWeight = $paraMeter[1];

$oWeight->genDict($v, $k1);

};

array_walk($aTableLine, $setter, array($iTableKey, $this));

}

$this->init();

}

public function getShow($sRule = 'max') {

//获取最终的显示结果

if(empty($this->aItems) || empty($this->aDict))

return array();

if (empty($this->aShow) || $sRule != $this->sLastRule)

return $this->genShow($sRule);

return $this->aShow;

}

public function genShow($sRule) {

$aShow = array();

$aMatchs = array();

$getter = function($v, $k, $oWeight) use(&$aShow, &$aMatchs, $sRule) {

$t = array_count_values($oWeight->matchWord($v));

$aMatchs[] = $t;

switch ($sRule) {

case 'max':

$aShow[$k] = array_keys($t, max($t));

break;

}

};

array_walk($this->aItems, $getter, $this);

$this->aShow = $aShow;

$this->aMatchs = $aMatchs;

return $aShow;

}

private function genDict($mWord, $iKey = '') {

$iInsertPonit = count($this->aDict);

$iCur = 0; //当前节点号

foreach (str_split($mWord) as $iChar) {

if (isset($this->aDict[$iCur][$iChar])) {

$iCur = $this->aDict[$iCur][$iChar];

continue;

}

$this->aDict[$iInsertPonit] = array();

$this->aDict[$iCur][$iChar] = $iInsertPonit;

$iCur = $iInsertPonit;

$iInsertPonit++;

}

$this->aDict[$iCur]['acc'][] = $iKey;

}

function matchWord($sLine) {

$iCur = $iOffset = $iPosition = 0;

$sLine .= "\0";

$iLen = strlen($sLine);

$aReturn = array();

while($iOffset < $iLen) {

$sChar = $sLine{$iOffset};

if(isset($this->aDict[$iCur][$sChar])) {

$iCur = $this->aDict[$iCur][$sChar];

if(isset($this->aDict[$iCur]['acc'])) {

$aReturn = array_merge($aReturn, $this->aDict[$iCur]['acc']);

$iPosition = $iOffset + 1;

$iCur = 0;

}

} else {

$iCur = 0;

$iOffset = $iPosition;

$iPosition = $iOffset + 1;

}

++$iOffset;

}

return $aReturn;

}

}

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
神经网络的初始赋值权重可以通过随机生成来实现。如果将所有权重的初始值设为0,神经网络将无法正常学习,因为在误差反向传播过程中,所有权重值都会进行相同的更新,导致权重的对称结构和不同权重的意义丧失。为了防止这种情况发生,需要随机生成初始值。一种常见的做法是在0到1之间生成随机数作为权重的初始值。在MATLAB中,可以使用net.IW{}和net.bias{}手动设置权重的初始值,一般来说,输入归一化后,可以将权重和偏置设置为0到1之间的随机数。另外,也可以将权重的范围设置为-1到1之间,这是因为归一化和Sigmoid函数输出区间限制的原因。在MATLAB中,可以使用net = init(net)来初始化神经网络,通过设定net.initFcn和net.layer{i}.initFcn来选择初始化函数。常用的初始化函数有initwb和initnw,其中initwb根据每一层自己的初始化参数来初始化权重矩阵和偏置,通常将权重初始化为-1到1之间的随机值。initnw则根据Nguyen和Widrow的方法为层产生初始权重和偏置值,使得每层神经元的活动区域能大致平坦地分布在输入空间中。因此,神经网络的初始赋值权重可以通过随机生成的方式来实现。 #### 引用[.reference_title] - *1* [【机器学习与深度学习理论要点】12.神经网络权重初始值如何设置?](https://blog.csdn.net/yegeli/article/details/107902424)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [神经网络的权重初始化,神经网络的权值和阈值](https://blog.csdn.net/wenangou/article/details/127327369)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值