当前位置: 首页 > wzjs >正文

电脑商城win10优化大师是官方的吗

电脑商城,win10优化大师是官方的吗,ui设计师个人简历,小程序搭建多少钱【1】引言 前序学习进程中,对霍普菲尔德神经网络有了初步认识,使用Hebbian方法测试了霍普菲尔德神经网络算法。相关学习文章链接为: 神经网络|(十四)|霍普菲尔德神经网络-CSDN博客 在此基础上,尝试探索使用Storkey方法对霍普菲…

【1】引言

前序学习进程中,对霍普菲尔德神经网络有了初步认识,使用Hebbian方法测试了霍普菲尔德神经网络算法。相关学习文章链接为:

神经网络|(十四)|霍普菲尔德神经网络-CSDN博客

在此基础上,尝试探索使用Storkey方法对霍普菲尔德神经网络算法进行测试。

【2】代码测试

和Hebbian训练方法一样,Storkey训练方法需要提前完成准备工作,定义子函数和主函数,完成实际效果测试。

【2.1】准备工作

准备工作需要引入必要模块:

import numpy as np #引入numpy模块
import matplotlib.pyplot as plt #引入nmatplotlib模块

【2.2】主函数

主函数通过把算法实施过程拆解为调用不同的子函数,直观表达了程序运行框架。

# 示例:创建一些简单的模式
patterns = [np.array([1, 1, 1, -1, -1, -1]),np.array([-1, -1, -1, 1, 1, 1])
]# 初始化权重
# 获得patterns第一个元素,也就是np.array([1, 1, 1, -1, -1, -1])中数字的数量
n_neurons = len(patterns[0])
weights = initialize_weights(n_neurons)# 训练网络
weights = train(weights, patterns)# 测试回忆功能
initial_state = np.array([1, 1, 1, -1, -1, -1])
recalled_pattern = recall(weights, initial_state)# 可视化结果
plt.figure(figsize=(12, 4))plt.subplot(1, 3, 1)
plt.imshow(initial_state.reshape(1, -1), cmap='gray')
plt.title('Initial State')plt.subplot(1, 3, 2)
plt.imshow(recalled_pattern.reshape(1, -1), cmap='BuGn')
plt.title('Recalled Pattern')plt.subplot(1, 3, 3)
plt.imshow(patterns[0].reshape(1, -1), cmap='Blues')
plt.title('Original Pattern')plt.show()

主函数直接调用了initialize_weights()、train()和recall()三个子函数,它们分别执行权重初始化、模型训练和测试回忆功能,下一步即可对这些子函数进行学习。

【2.3】子函数

【2.3.1】initialize_weights()函数
# 定义初始化函数
def initialize_weights(n_neurons):"""初始化霍普菲尔德网络的权重矩阵:param n_neurons: 神经元的数量:return: 初始的权重矩阵"""# 返回一个(n_neurons行, n_neurons列)纯0矩阵return np.zeros((n_neurons, n_neurons))

initialize_weights()函数生成的是 (n_neurons行, n_neurons列)纯0矩阵,作为权重weights的初始值。

【2.3.2】train()函数
# 训练模型传入的参数有weights和patterns
def train(weights, patterns):"""使用 Storkey 学习规则训练网络:param weights: 权重矩阵:param patterns: 训练模式的列表:return: 训练后的权重矩阵"""for pattern in patterns:# 将pattern转化为列向量# 由于每个pattern中有n_neurons个元素,所以pattern转化后的列向量有n_neurons行pattern = pattern.reshape(-1, 1)# n获取pattern向量的行数,n=n_neuronsn = len(pattern)for i in range(n):for j in range(n):if i != j:# 让不同的pattern元素彼此相乘term1 = pattern[i] * pattern[j]# 初始值赋值0term2 = 0# 初始值赋值0term3 = 0for k in range(n):if k != i and k != j:# weights矩阵的结构是(n_neurons行,n_neurons列)# term2考虑了第k和第j个pattern元素对i行k列权重的影响term2 += weights[i, k] * pattern[k] * pattern[j]# term3考虑了第k和第j个pattern元素对j行k列权重的影响term3 += weights[j, k] * pattern[k] * pattern[i]# 3个term进行了综合delta_w = term1 - term2 - term3# 确保 delta_w 是标量weights[i, j] += delta_w.item()# 确保对角线元素为 0np.fill_diagonal(weights, 0)# 除以总模数,进行归一化操作weights /= len(patterns)return weights

Storkey方法的train()函数和Hebbian方法有显著不同,Storkey方法获得weights的过程更为复杂,考虑了综合影响。

Hebbian方法Storkey方法
# 训练模型传入的参数有weights和patterns
def train(weights, patterns):
    """
    使用 Hebbian 学习规则训练网络
    :param weights: 权重矩阵
    :param patterns: 训练模式的列表
    :return: 训练后的权重矩阵
    """
    for pattern in patterns:
        # 将pattern转化为一个列向量
        pattern = pattern.reshape(-1, 1)
        # weights是在自身的基础上叠加pattern自身的平方
       
weights += np.dot(pattern, pattern.T)
    # 确保对角线元素为 0
    # 通过内置函数,让weights处于对角线上的元素都为0
    np.fill_diagonal(weights, 0)
    # 除以总模数,进行归一化操作
    weights /= len(patterns)
    return weights
# 训练模型传入的参数有weights和patterns
def train(weights, patterns):
    """
    使用 Storkey 学习规则训练网络
    :param weights: 权重矩阵
    :param patterns: 训练模式的列表
    :return: 训练后的权重矩阵
    """
    for pattern in patterns:
        # 将pattern转化为列向量
        # 由于每个pattern中有n_neurons个元素,所以pattern转化后的列向量有n_neurons行
        pattern = pattern.reshape(-1, 1)
        # n获取pattern向量的行数,n=n_neurons
        n = len(pattern)
       
for i in range(n):
            for j in range(n):
                if i != j:
                    # 让不同的pattern元素彼此相乘
                    term1 = pattern[i] * pattern[j]
                    # 初始值赋值0
                    term2 = 0
                    # 初始值赋值0
                    term3 = 0
                    for k in range(n):
                        if k != i and k != j:
                            # weights矩阵的结构是(n_neurons行,n_neurons列)
                            # term2考虑了第k和第j个pattern元素对i行k列权重的影响
                            term2 += weights[i, k] * pattern[k] * pattern[j]
                            # term3考虑了第k和第j个pattern元素对j行k列权重的影响
                            term3 += weights[j, k] * pattern[k] * pattern[i]
                    # 3个term进行了综合
                    delta_w = term1 - term2 - term3
                    # 确保 delta_w 是标量
                    weights[i, j] += delta_w.item()

    # 确保对角线元素为 0
    np.fill_diagonal(weights, 0)
    # 除以总模数,进行归一化操作
    weights /= len(patterns)
    return weights

Storkey方法相对Hebbian方法,更多地考虑了交叉影响。

【2.3.3】recall()函数
def recall(weights, initial_state, max_iterations=100):"""从初始状态回忆模式:param weights: 权重矩阵:param initial_state: 初始状态:param max_iterations: 最大迭代次数:return: 回忆出的模式"""state = initial_state.copy()for _ in range(max_iterations):new_state = update(weights, state)if np.array_equal(new_state, state):breakstate = new_statereturn state

recall()函数要求调用update()函数生成新状态,用新状态来覆盖旧状态。

【2.3.4】update()函数
def update(weights, state):"""更新网络状态:param weights: 权重矩阵:param state: 当前网络状态:return: 更新后的网络状态"""# state转化为列向量state = state.reshape(-1, 1)# 先用weights和state矩阵相乘,然后用np.sign()函数返回1,-1和0# np.sign()函数,参数为正返回1,参数为负返回-1,参数为0返回0new_state = np.sign(np.dot(weights, state))return new_state.flatten()

图1 Storkey训练效果  

此时的完整代码为:

import numpy as np #引入numpy模块
import matplotlib.pyplot as plt #引入nmatplotlib模块# 定义初始化函数
def initialize_weights(n_neurons):"""初始化霍普菲尔德网络的权重矩阵:param n_neurons: 神经元的数量:return: 初始的权重矩阵"""# 返回一个(n_neurons行, n_neurons列)纯0矩阵return np.zeros((n_neurons, n_neurons))# 训练模型传入的参数有weights和patterns
def train(weights, patterns):"""使用 Storkey 学习规则训练网络:param weights: 权重矩阵:param patterns: 训练模式的列表:return: 训练后的权重矩阵"""for pattern in patterns:# 将pattern转化为列向量# 由于每个pattern中有n_neurons个元素,所以pattern转化后的列向量有n_neurons行pattern = pattern.reshape(-1, 1)# n获取pattern向量的行数,n=n_neuronsn = len(pattern)for i in range(n):for j in range(n):if i != j:# 让不同的pattern元素彼此相乘term1 = pattern[i] * pattern[j]# 初始值赋值0term2 = 0# 初始值赋值0term3 = 0for k in range(n):if k != i and k != j:# weights矩阵的结构是(n_neurons行,n_neurons列)# term2考虑了第k和第j个pattern元素对i行k列权重的影响term2 += weights[i, k] * pattern[k] * pattern[j]# term3考虑了第k和第j个pattern元素对j行k列权重的影响term3 += weights[j, k] * pattern[k] * pattern[i]# 3个term进行了综合delta_w = term1 - term2 - term3# 确保 delta_w 是标量weights[i, j] += delta_w.item()# 确保对角线元素为 0np.fill_diagonal(weights, 0)# 除以总模数,进行归一化操作weights /= len(patterns)return weightsdef update(weights, state):"""更新网络状态:param weights: 权重矩阵:param state: 当前网络状态:return: 更新后的网络状态"""# state转化为列向量state = state.reshape(-1, 1)# 先用weights和state矩阵相乘,然后用np.sign()函数返回1,-1和0# np.sign()函数,参数为正返回1,参数为负返回-1,参数为0返回0new_state = np.sign(np.dot(weights, state))return new_state.flatten()def recall(weights, initial_state, max_iterations=100):"""从初始状态回忆模式:param weights: 权重矩阵:param initial_state: 初始状态:param max_iterations: 最大迭代次数:return: 回忆出的模式"""state = initial_state.copy()for _ in range(max_iterations):new_state = update(weights, state)if np.array_equal(new_state, state):breakstate = new_statereturn state# 示例:创建一些简单的模式
patterns = [np.array([1, 1, 1, -1, -1, -1]),np.array([-1, -1, -1, 1, 1, 1])
]# 初始化权重
# 获得patterns第一个元素,也就是np.array([1, 1, 1, -1, -1, -1])中数字的数量
n_neurons = len(patterns[0])
weights = initialize_weights(n_neurons)# 训练网络
weights = train(weights, patterns)# 测试回忆功能
initial_state = np.array([1, 1, 1, -1, -1, -1])
recalled_pattern = recall(weights, initial_state)# 可视化结果
plt.figure(figsize=(12, 4))plt.subplot(1, 3, 1)
plt.imshow(initial_state.reshape(1, -1), cmap='gray')
plt.title('Initial State')plt.subplot(1, 3, 2)
plt.imshow(recalled_pattern.reshape(1, -1), cmap='BuGn')
plt.title('Recalled Pattern')plt.subplot(1, 3, 3)
plt.imshow(patterns[0].reshape(1, -1), cmap='Blues')
plt.title('Original Pattern')plt.show()

【3】分析

Storkey训练方法考察的关联影响更为丰富,但是记得运行效果显示:recall pattern并且和origin pattern保持完全一致。所以,实际的训练过程还未达到最佳效果。

【4】细节说明

Storkey训练方法相对于Hebbian训练方法知识train()函数发生变化。

回执图像时,因为initial_state和patterns[0]一致,所以对比图像origin pattern选择了patterns[0]。

【5】总结

探索了霍普菲尔德神经网络的基本知识,基于python语言,调用Storkey方法对霍普菲尔德神经网络算法进行了初步训练和测试。

http://www.dtcms.com/wzjs/255393.html

相关文章:

  • 后台做网站的题最新中国新闻
  • 石家庄市政府网站建设历程百度投流
  • 开发公司支付前期物业开办费包括哪些内容公司seo
  • 鹰潭市住房和城乡建设局网站关键词优化的建议
  • 网站制作完成之后进入什么阶段产品网络推广深圳
  • 网站seo技巧游戏推广在哪里接活
  • 西安网站制作网站站长统计app下载大全
  • 有没有做盗版电影网站犯罪的网络销售怎么做才能有业务
  • 咸阳做网站哪家好国内的搜索引擎排名
  • 关于网站建设的pptseo运营
  • 宁波建设网站价格百度电话号码查询平台
  • asp与sql网站建设百度网盘电脑版
  • 有哪些做室内设计好用的网站有哪些关键词大全
  • 西安为什么今天紧急通知搜索引擎优化举例说明
  • 手机如何复制网站模板关键词seo排名公司
  • 备案 网站 漏接 电话互联网营销策略有哪些
  • 做批发网站有哪些优化网站的软件下载
  • 华亚快印网站开发天津seo选天津旗舰科技a
  • 重庆建设行政主管部门网站整合营销传播
  • 如何评价一个企业的网站建设深圳网站优化软件
  • 郑州做网站推广电话网络推广网络营销外包
  • wordpress 整站打包营销模式有哪些
  • 桥西做网站seo怎么刷关键词排名
  • 美国一级a做爰片免费网站北京seo排名优化网站
  • 营销型网站建设 案例shodan搜索引擎
  • 手机网站模板cms合肥关键词排名推广
  • 效果好网站建设哪家便宜优秀的软文广告案例
  • 广东智能网站建设质量保障市场调研
  • 卡盟怎么做网站seo网站优化课程
  • wordpress 5.0火车头发布模块合肥搜索引擎优化