import caffe import numpy as np classEuclideadLossLayer(caffe.Layer):#EuclideadLossLayer没有权值,反向传播过程中不需要进行权值的更新。如果需要定义需要更新自身权值的层,最好还是使用C++ defsetup(self,bottom,top): #在网络运行之前根据相关参数参数进行layer的初始化 if len(bottom) !=2: raise exception("Need two inputs to compute distance") defreshape(self,bottom,top): #在forward之前调用,根据bottom blob的尺寸调整中间变量和top blob的尺寸 if bottom[0].count !=bottom[1].count: raise exception("Inputs must have the same dimension.") self.diff=np.zeros_like(bottom[0].date,dtype=np.float32) top[0].reshape(1) defforward(self,bottom,top): #网络的前向传播 self.diff[...]=bottom[0].data-bottom[1].data top[0].data[...]=np.sum(self.diff**2)/bottom[0].num/2. defbackward(self,top,propagate_down,bootm): #网络的前向传播 for i in range(2): ifnot propagate_down[i]: continue if i==0: sign=1 else: sign=-1 bottom[i].diff[...]=sign*self.diff/bottom[i].num
《DATA MINING—Concepts and Techniques》是经典的数据挖掘入门书籍,内容囊括数据挖掘的基本概念、数据的预处理、数据的存储、数据中模式的挖掘、分类、聚类、异常检测等方面,作者是著名的韩家炜教授。数据的预处理在真实世界数据中是非常关键的一步,它既是不同数据挖掘应用的共同起点,又很大程度上影响了数据挖掘应用的效果。我将翻译、整理这本书中关于数据预处理的部分,如果有纰漏欢迎指正。
实体识别中最主要的问题匹配不同的数据源中指向现实世界相同实体的纪录。比如分析有不同销售员纪录的14年和15年两年的销售数据,由于不同的销售员有不同的纪录习惯,顾客的名字纪录方式并不一样,一个销售员喜欢纪录全名(例如 Wardell Stephen Curry II),另外一个销售员喜欢将中间名省略(Wardell S Curry II ),虽然Wardell Stephen Curry II和Wardell S Curry II是现实世界中是同一名顾客,但计算机会识别为两位不同的顾客,解决这个问题就需要Entity Identification。一个常用的Entity Indentification Problem的解决算法是LSH算法 另外一个问题是Schema integration, Schenma在这里指使用DBMS支持的形式化语言对一个数据库的结构化描述,Schema是构建一个数据库的蓝图。Schema intergration则是指,将若干个Schema合成一个global Schema,这个global Schema可以表达所有子Schema的要求(也就是一个总的蓝图)。属性的metadata(比如名称、取值范围、空值处理方法)可以帮助减少Schema Intergration的错误。
correct = 0 for i=1,3500do----我的测试集有3500个cube local groundtruth = testset.label[i][1] local prediction = net:forward(testset.data[i]) local confidences, indices = torch.sort(prediction, true) if groundtruth == indices[1] then correct = correct + 1 end end print(correct, 100*correct/3500 .. ' % ')