自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(141)
  • 资源 (1)
  • 收藏
  • 关注

原创 leetcode 二叉树

树的遍历二叉树的前序遍历递归/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), righ

2024-07-07 18:43:41 323 2

转载 Open CasCade简介

Open CASCADE 技术 (OCCT) 是唯一的开源完整 3D 几何库。OCCT 致力于成为最好的免费 CAD 软件内核之一,广泛用于开发以下工程和机械领域的专业程序:3D 建模 (CAD)、制造 (CAM)、数值模拟 (CAE)、测量设备 (CMM) 和质量控制 (CAQ)。自 1999 年作为开源 CAD 软件内核发布以来,OCCT 已成功应用于从建筑施工到航空航天和汽车等众多项目。

2024-07-07 11:51:03 329

转载 像计算机科学家一样思考(C++)

像计算机科学家一样思考计算机科学教最重要的技能就是解决问题解决问题分为以下3点明确地表述问题创造性地思考解决方案清晰而明确地表达方案第1章 编程之路1.1 什么是编程语言我们要学习的编程语言是C++,因为自1998年起大学先修课程考试就基于C++语言了。之前的考试用的是Pascal语言。C++和Pascal都是高级语言,你或许也听说过Java、C和FORTRAN等其他高级语言吧。从“高级语言”这个名字可以推断,应该同样存在低级语言,低级语言一般也称为机器语言或汇编语言。不严格地讲,计算

2021-04-03 15:54:05 1564

原创 GL GLU GLUT的关系

GL GLU GLUT的关系OpenGL中的gl库是核心库,glu是实用库,glut是实用工具库。gl是核心,glu是对gl的部分封装,glut是OpenGL的跨平台工具库。gl中包含了最基本的3D函数,而glu似乎对gl的辅助,如果算数好,不用glu的情况下,也是可以做出同样的效果。glut是基本的窗口界面,如果不喜欢用glut可以用MFC和Win32窗口等代替,但是glut是跨平台的,这就保证了我们编出的程序是跨平台的,如果用MFC或者Win32只能在windows操作系统上使用。选择OpenG

2021-04-03 10:44:12 372

原创 2020DCIC智能算法赛-智慧海洋建设(渔船分类)

最近忙于找工作,之前做的项目还没有总结过,这里就先简单的总结一下项目要求通过分析渔船北斗设备位置数据,具体判断出是拖网作业、围网作业还是流刺网作业。即:“轨迹(序列数据)+多分类”的任务,评估指标选用的是F1值。本项目的关键点就是对原始数据的特征工程:baseline(本人的baseline代码找不到了,所以这里借用已经公开的方法,方法基本一样,只不过本人的baseline引入了更多的统计量)import os, sys, globimport numpy as npimport pandas

2020-09-17 15:08:22 3101

原创 Python字符串中含有某子字符串的个数

str1 = "abskfirgnlskgabndf"str2 = "ab"num = (len(str1) - len(str1.replace(str2,""))) // len(str2)

2020-09-08 08:25:58 1816

转载 计算机网络知识点-第六章:应用层

0.本章思维导图:    应用层协议:每个应用层协议都是为了解决一类应用问题,而解决问题需要通过位于不同主机的多个应用进程之间的通信和协同来完成,应用层的具体内容就是定义这些通信规则1.域名系统DNS        1.域名系统概述:            域名...

2020-06-06 10:12:27 776

转载 计算机网络知识点-第五章:运输层

0.本章思维导图:1.运输层协议概述       1.进程间的通信       概述:            运输层向它上面的应用层提供通信服务运输层属于面向通信部分的最高层,同时也是用户功能中的最底层;只有位于网络边缘...

2020-06-06 09:47:08 4090

转载 Convolutional Neural Networks for Sentence Classification

本文将CNN和NLP结合; 介绍了一系列的对比实验,实验结果说明了:一个简单的(单层神经网络)的CNN模型一点超参数的调节(Filter的个数)static word vector另外,对cnn模型进行了小改动:将static vec...

2020-05-27 16:38:22 1013

转载 计算机网络-第四章:网络层

0.本章思维导图:1.网络层提供的两种服务   *网络层提供服务的特点:网络层向上只提供简单的、无连接的、尽最大努力交付的数据报服务,不保证可靠通信    虚电路服务:保证可靠通信,必须建立连接        思路:可靠通信由网络保证        连接的建立:必须有...

2020-05-24 20:47:59 4374

转载 计算机网络-第三章:数据链路层

0.本章思维导图:数据链路层使用的信道:    点对点信道:使用一对一的点对点通信方式    广播信道:使用一对多的广播通信方式,过程比较复杂,需要专用的协议来协调 1.使用点对点信道的数据链路层    1.1数据链路和帧    链路(物理链路):从一个结点到相邻结点的一段物理线路,中间没有...

2020-05-22 23:08:29 1171

原创 计算机网络-物理层

2 计算机网络-物理层2.1 物理层的基本概念物理层解决如何在连接连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的主要任务为:确定传输媒体的接口的一些特性:1、 机械特性:接口形状、大小、引线数目2、 电气特性:规定电压范围(-5v到+5v)3、 功能特性:例如 规定-5v表示0,+5表示14、 过程特性:规定建立连接时,各个相关部件的工作步骤。2.2 数据通信的基础知识相关术语:一、通信通信的目的是传递消息。1、 数据data:运送消息的实体。2、 信号

2020-05-22 23:07:07 304

原创 TF-IDF算法

最近在肝腾讯广告大赛2020,特征提取部分陷入了窘境,突然想起了tf-idf,就来复习一波。TF-IDF的概念TF-IDF是Term Frequency - Inverse Document Frequency的缩写,即“词频-逆文本频率”。它由两部分组成,TF和IDF。TF策略我在之前的高频词提取文章中进行过使用,TF用来表示词频,也就是某个词在文章中出现的总次数,也就是:TF=某个词在文章中出现的总次数但是考虑到每篇文章的长短是不同的,所以我们可以把上述内容进行一个标准化:TF=某个词在文

2020-05-16 10:22:30 360

转载 并查集(Union-Find)

并查集(Union-Find)是解决动态连通性问题的一类非常高效的数据结构。本文中,我将尽我所能用最简单,最清晰的逻辑展示出并查集的构造过程,同时还将对其中的关键步骤给出相应的Python代码。动态连通性可以想象一张地图上有很多点,有些点之间是有道路相互联通的,而有些点则没有。如果我们现在要从点A走向点B,那么一个关键的问题就是判断我们能否从A走到B呢?换句话说,A和B是否是连通的。这是动态连通性最基本的诉求。现在给出一组数据,其中每个元素都是一对“点”,代表这对点之间是联通的,我们需要设计一个算法,让

2020-05-15 15:34:56 818

原创 JDBC

JDBCJDBC介绍JDBC(Java DataBase Connectivity)是Java和数据库之间的一个桥梁,是一个规范而不是一个实现,能够执行SQL语句。它由一组用Java语言编写的类和接口组成。各种不同类型的数据库都有相应的实现,本文中的代码都是针对MySQL数据库实现的。JDBC是一个中间件,可以理解为一个工具类,JDBC由很多类组成。在JDBC中,已经封装好了对各种数据库进行操作的方法,对于程序开发来说,不需要关心每一个DBMS应该怎么连接,只需要关心JDBC如何使用即可,因此降低开

2020-05-12 15:14:51 166

原创 java多线程

Java多线程1.1 同步和异步同步:当有多个任务需要执行的时候,这多个任务按照一定的顺序,从前往后开始执行异步:当有多个任务需要执行的时候,在某一个时间段内,有多个任务在同时执行1.2 线程与进程进程:是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。线程:是进程的一个执行路径,一个进程中至少有一个线程,进程中的多个线程共享进程的资源。虽然系统是把资源分给进程,但是CPU很特殊,是被分配到线程的,所以线程是CPU分配的基本单位。二者关系:一个进程中有多个

2020-05-12 15:13:17 158

原创 java 第二部分

java三目运算符三目运算符 (表达式1)?(表达式2):(表达式3),计算方法是这样的:表达式1是一个逻辑表达式,如果其值为true,则整个表达式的值为表达式2的值,否则为表达式3的值。在一个表达式中可能包含多个有不同运算符连接起来的、具有不同数据类型的数据对象;由于表达式有多种运算,不同的结合顺序可能得出不同结果甚至出现错误运算错误,因为当表达式中含多种运算时,必须按一定顺序进行结合,才能保证运算的合理性和结果的正确性、唯一性。优先级1.优先级与求值顺序无关。如a+b &&

2020-05-12 15:11:53 505

原创 1049. 最后一块石头的重量 II(01背包问题变种-动态规划)

有一堆石头,每块石头的重量都是正整数。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块石头。返回此石头最小的可能重量。如果没有石头剩下,就返回...

2020-03-24 14:07:36 304

原创 课时11-25 多表查询

多表查询分类:合并结果集(了解)、连接查询(一次查多个表)、子查询(查的表里包个表)合并结果集要求被合并的表中(结果集),列的类型和列数相同UNION,去除重复行UNION ALL,不去除重复行CREATE TABLE ab(a INT,b VARCHAR(50));INSERT INTO ab VALUES(1,'1');INSERT INTO ab VALUES(2,'2'...

2020-03-23 11:05:18 182

原创 面试题63. 股票的最大利润(动态规划)

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-...

2020-03-21 22:06:06 542

原创 面试题61. 扑克牌中的顺子

从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。示例:输入: [0,0,1,2,5]输出: True思路首先排序,其次统计数组中0的个数,最后统计排序后的数组中相邻数字之间的空缺个数,如果空缺个数小于等于0的个数且数组中除0之外没有重复的,就是连续的,否...

2020-03-21 20:53:32 174

原创 面试题60. n个骰子的点数(动态规划)

把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。输入: 2输出: [0.02778,0.05556,0.08333,0.11111,0.13889,0.16667,0.13889,0.11111,0.08333,0.05556,0.02...

2020-03-21 20:23:40 261

原创 面试题59 - I. 滑动窗口的最大值

给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值--------------- -----[1 3 -1] -3 5 3 6 7 ...

2020-03-21 16:13:26 168

原创 面试题58 - II. 左旋转字符串

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。思路1没啥可说的在对于大数据时join的效率要高于+因为+操作是生成一个新的字符串,需要创建额外的内存,当数据量大时会很耗内存的join对多个字符进行连接时效率高,只会有一次内存的申请。而...

2020-03-21 15:29:25 105

原创 面试题58 - I. 翻转单词顺序

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。思路按空格分割成单词列表,1.末位单词+空格 2.最后一个单词末位不加空格class Solution: def reverseWords(self, s: str) -> str:...

2020-03-21 15:18:50 156

原创 面试题57 - II. 和为s的连续正数序列

输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]考虑用两个数i,j分别表示序列的最小值和最大值。首先把i,j初始化为1。如果从i到j的和大于s,从序列中去掉较小的值i,并增大i的值;反之,去掉j的值,并增大j的...

2020-03-21 15:00:32 119

原创 面试题57. 和为s的两个数字

输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]思路:双指针法先在数组中选择两个数字,如果它们的和等于输入的s,那么就找到了要找的数字;如果小于s,希望两个数字的和大一些,由于数组已经排好序了,可以考虑选...

2020-03-21 14:21:43 129

原创 面试题56 - II. 数组中数字出现的次数 II(位操作!!!!)

在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。hashmapclass Solution: def singleNumber(self, nums: List[int]) -> int: dic = {} for i in nums: if i in dic: ...

2020-03-21 14:05:01 329

原创 面试题56 - I. 数组中数字出现的次数(位操作的精妙不太懂)

一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。hashmap(字典实现)此解法空间复杂度为O(n)class Solution: def singleNumbers(self, nums: List[int]) -> List[int]: dic = {} ...

2020-03-21 14:02:21 101

原创 面试题53 - II. 0~n-1中缺失的数字(二分变种)

一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 2:输入: [0,1,2,3,4,5,6,7,9]输出: 8排序数组中的搜索问题,首先想到 二分法 解决。根据题意,数组可以按照以下规则划分为两部分。左子数组:nums[i]=inums[i]nums[i] = in...

2020-03-20 22:25:18 219

原创 面试题53 - I. 在排序数组中查找数字 I(二分查找上下界问题)

统计一个数字在排序数组中出现的次数。思路:二分查找具体思考过程见注释def search_left_right(alist, target): i, j = 0, len(alist) - 1 # 查找右边界 while i <= j: mid = i + (j - i) // 2 if alist[mid] <= targ...

2020-03-20 20:20:12 198

原创 希尔排序

插入排序的比对次数,在最好的情况下是O(n),这种情况发生在列表已是有序的情况下,实际上,列表越接近有序,插入排序的比对次数就越少从这个情况分析,希尔排序以插入排序作为基础,对无序表进行“间隔”划分子列表,每个子列表都执行插入排序最后一趟是标准的插入排序,但由于前面几趟已经将列表处理到接近有序,这一趟仅需少数几次移动即可完成子列表的间隔一般从n/2开始,每趟倍增:n/4, n/8,…,1d...

2020-03-20 18:09:20 129

原创 插入排序及python实现

假设数列第一个元素为已排序数列,剩余数列为未排序将待排序元素挨个插入到已排序数列中每次插入都必须保证数列是有序的,即通过比较和移动有序数列中的元素,将元素插入到合适的位置。插入排序维持一个已排好序的子列表,其位置始终在列表的前部,然后逐步扩大这个子列表直至全表思路:如同玩扑克牌一样,每次摸牌都将它与手中的牌比较,始终将牌放在比它大的牌前面,比它小的牌后面。这样当牌全部摸到手上后,就是一个有序的...

2020-03-20 17:38:41 260

原创 冒泡和选择排序算法

冒泡排序时间复杂度O(n2)O(n^2)O(n2)冒泡排序的算法思路在于对无序表进行多趟比较交换每趟包括了多次亮亮相邻比较,并将逆序的数据项互换位置,最终能将本趟的最大项就位经过n-1趟比较交换,实现整表排序每趟的过程类似于“气泡”在水中不断上浮到水面的过程具体过程:第1趟比较交换,共有n-1对相邻数据进行比较(一旦经过最大项,则最大项会一路交换到达最后一项);第2趟比较交换...

2020-03-20 16:28:26 120

原创 二分查找及python实现

二分查找适合对于有序表的查找每次通过与区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为0时间复杂度就是O(logn)// 表示整数除法,返回一个不大于" / "计算结果的最大整数int(即为下取整)def binarySearch(nums, target): if len(nums) == 0: return False...

2020-03-20 15:50:59 118

原创 面试题52. 两个链表的第一个公共节点

输入两个链表,找出它们的第一个公共节点。输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 ...

2020-03-20 15:17:13 131

原创 面试题50. 第一个只出现一次的字符

在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。示例:s = “abaccdeff”——返回 “b”s = “” ——返回 " "s = “cc”——返回“ ”思路建立普通的字典,也是遍历一边字符串s,将这些字符和他们的出现次数放入到字典中再次遍历s,在字典中进行查找,找到第一个值为1的字符即可,否则返回" "时间复杂度O(n),空间复杂度O(1),因为字符的...

2020-03-20 13:56:32 175

原创 面试题49. 丑数

我们把只包含因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。说明: 1 是丑数;n 不超过1690。示例:输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。思路最普通的想法时遍历n个数,找到符合要求的数更好的思路是丑数都是2,3,5的倍数,直接找到他们。不对非...

2020-03-20 13:29:52 120

原创 面试题48. 最长不含重复字符的子字符串

请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。思路:动态规划首先定义函数f(i)为以第i个字符为结尾的不包含重复字符的子字符串的最长长度,计算f(i)时,f(i-1)已知。如果第i个字以前没有出现过,那么f(i) = f(i-1)+1...

2020-03-20 13:00:02 158

原创 面试题47. 礼物的最大价值

在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例 1:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物思...

2020-03-20 11:05:32 225

opencascade第三方依赖库(windows)

opencascade第三方依赖库(windows)

2024-07-21

python飞机大战

import matplotlib.pylab as plt import numpy as np import random from scipy.linalg import norm import PIL.Image class Rbm: def __init__(self,n_visul, n_hidden, max_epoch = 50, batch_size = 110, penalty = 2e-4, anneal = False, w = None, v_bias = None, h_bias = None): self.n_visible = n_visul self.n_hidden = n_hidden self.max_epoch = max_epoch self.batch_size = batch_size self.penalty = penalty self.anneal = anneal if w is None: self.w = np.random.random((self.n_visible, self.n_hidden)) * 0.1 if v_bias is None: self.v_bias = np.zeros((1, self.n_visible)) if h_bias is None: self.h_bias = np.zeros((1, self.n_hidden)) def sigmod(self, z): return 1.0 / (1.0 + np.exp( -z )) def forward(self, vis): #if(len(vis.shape) == 1): #vis = np.array([vis]) #vis = vis.transpose() #if(vis.shape[1] != self.w.shape[0]): vis = vis.transpose() pre_sigmod_input = np.dot(vis, self.w) + self.h_bias return self.sigmod(pre_sigmod_input) def backward(self, vis): #if(len(vis.shape) == 1): #vis = np.array([vis]) #vis = vis.transpose() #if(vis.shape[0] != self.w.shape[1]): back_sigmod_input = np.dot(vis, self.w.transpose()) + self.v_bias return self.sigmod(back_sigmod_input) def batch(self): eta = 0.1 momentum = 0.5 d, N = self.x.shape num_batchs = int(round(N / self.batch_size)) + 1 groups = np.ravel(np.repeat([range(0, num_batchs)], self.batch_size, axis = 0)) groups = groups[0 : N] perm = range(0, N) random.shuffle(perm) groups = groups[perm] batch_data = [] for i in range(0, num_batchs): index = groups == i batch_data.append(self.x[:, index]) return batch_data def rbmBB(self, x): self.x = x eta = 0.1 momentum = 0.5 W = self.w b = self.h_bias c = self.v_bias Wavg = W bavg = b cavg = c Winc = np.zeros((self.n_visible, self.n_hidden)) binc = np.zeros(self.n_hidden) cinc = np.zeros(self.n_visible) avgstart = self.max_epoch - 5; batch_data = self.batch() num_batch = len(batch_data) oldpenalty= self.penalty t = 1 errors = [] for epoch in range(0, self.max_epoch): err_sum = 0.0 if(self.anneal): penalty = oldpenalty - 0.9 * epoch / self.max_epoch * oldpenalty for batch in range(0, num_batch): num_dims, num_cases = batch_data[batch].shape data = batch_data[batch] #forward ph = self.forward(data) ph_states = np.zeros((num_cases, self.n_hidden)) ph_states[ph > np.random.random((num_cases, self.n_hidden))] = 1 #backward nh_states = ph_states neg_data = self.backward(nh_states) neg_data_states = np.zeros((num_cases, num_dims)) neg_data_states[neg_data > np.random.random((num_cases, num_dims))] = 1 #forward one more time neg_data_states = neg_data_states.transpose() nh = self.forward(neg_data_states) nh_states = np.zeros((num_cases, self.n_hidden)) nh_states[nh > np.random.random((num_cases, self.n_hidden))] = 1 #update weight and biases dW = np.dot(data, ph) - np.dot(neg_data_states, nh) dc = np.sum(data, axis = 1) - np.sum(neg_data_states, axis = 1) db = np.sum(ph, axis = 0) - np.sum(nh, axis = 0) Winc = momentum * Winc + eta * (dW / num_cases - self.penalty * W) binc = momentum * binc + eta * (db / num_cases); cinc = momentum * cinc + eta * (dc / num_cases); W = W + Winc b = b + binc c = c + cinc self.w = W self.h_bais = b self.v_bias = c if(epoch > avgstart): Wavg -= (1.0 / t) * (Wavg - W) cavg -= (1.0 / t) * (cavg - c) bavg -= (1.0 / t) * (bavg - b) t += 1 else: Wavg = W bavg = b cavg = c #accumulate reconstruction error err = norm(data - neg_data.transpose()) err_sum += err print epoch, err_sum errors.append(err_sum) self.errors = errors self.hiden_value = self.forward(self.x) h_row, h_col = self.hiden_value.shape hiden_states = np.zeros((h_row, h_col)) hiden_states[self.hiden_value > np.random.random((h_row, h_col))] = 1 self.rebuild_value = self.backward(hiden_states) self.w = Wavg self.h_bais = b self.v_bias = c def visualize(self, X): D, N = X.shape s = int(np.sqrt(D)) if s == int(np.floor(s)): num = int(np.ceil(np.sqrt(N))) a = np.zeros((num*s + num + 1, num * s + num + 1)) - 1.0 x = 0 y = 0 for i in range(0, N): z = X[:,i] z = z.reshape(s,s,order='F') z = z.transpose() a[x*s+1+x - 1:x*s+s+x , y*s+1+y - 1:y*s+s+y ] = z x = x + 1 if(x >= num): x = 0 y = y + 1 d = True else: a = X return a def readData(path): data = [] for line in open(path, 'r'): ele = line.split(' ') tmp = [] for e in ele: if e != '': tmp.append(float(e.strip(' '))) data.append(tmp) return data if __name__ == '__main__': data = readData('data.txt') data = np.array(data) data = data.transpose() rbm = Rbm(784, 100,max_epoch = 50) rbm.rbmBB(data) a = rbm.visualize(data) fig = plt.figure(1) ax = fig.add_subplot(111) ax.imshow(a) plt.title('original data') rebuild_value = rbm.rebuild_value.transpose() b = rbm.visualize(rebuild_value) fig = plt.figure(2) ax = fig.add_subplot(111) ax.imshow(b) plt.title('rebuild data') hidden_value = rbm.hiden_value.transpose() c = rbm.visualize(hidden_value) fig = plt.figure(3) ax = fig.add_subplot(111) ax.imshow(c) plt.title('hidden data') w_value = rbm.w d = rbm.visualize(w_value) fig = plt.figure(4) ax = fig.add_subplot(111) ax.imshow(d) plt.title('weight value(w)') plt.show()

2018-10-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除