[转载]python里x=randn mat=x.T.dot 是求什么?

python里x=randn mat=x.T.dot 是求什么?

转自百度知道https://zhidao.baidu.com/question/811675877155828172.html
x=randn这个写法是不对的。
randn是numpy里的一个生成随机array的函数。
比如说要生成一个三行两列的随机array,可以这样写:
import numpy
x = numpy.random.randn(3,2)
像这样:

图1
后面这个mat=x.T.dot(…)是先求这个3*3矩阵的转置(.T),再求与点积(.dot)
点积就是矩阵各个对应元素相乘, 这个时候要求两个矩阵必须同样大小。
其实可以分步来的,就知道做了什么运算了。
像这样:

图2
dot(2)是点乘常数就不说了,
那个x.T.dot([1,2,3])就是x.T的

1 * 1 + 2 * 2 + 3 * 3 = 14
2 * 1 + 3 * 2 + 4 * 3 = 20

import numpy as np def loaddataset(filename): fp = open(filename) #存放数据 dataset = [] #存放标签 labelset = [] for i in fp.readlines(): a = i.strip().split() #每个数据行的最后一个是标签数据 dataset.append([float(j) for j in a[:len(a)-1]]) labelset.append(int(float(a[-1]))) return dataset, labelset #x为输入层神经元个数,y为隐层神经元个数,z输出层神经元个数 def parameter_initialization(x, y, z): #隐层阈值 value1 = np.random.randint(-5, 5, (1, y)).astype(np.float64) #输出层阈值 value2 = np.random.randint(-5, 5, (1, z)).astype(np.float64) #输入层与隐层的连接权重 weight1 = np.random.randint(-5, 5, (x, y)).astype(np.float64) #隐层与输出层的连接权重 weight2 = np.random.randint(-5, 5, (y, z)).astype(np.float64) return weight1, weight2, value1, value2 #返回sigmoid函数值 def sigmoid(z): #********** Begin **********# #********** End **********# ''' weight1:输入层与隐层的连接权重 weight2:隐层与输出层的连接权重 value1:隐层阈值 value2:输出层阈值 ''' def trainning(dataset, labelset, weight1, weight2, value1, value2): #dataset:数据集 labelset:标签数据 #x为步长 x = 0.01 for i in range(len(dataset)): #输入数据 inputset = np.mat(dataset[i]).astype(np.float64) #数据标签 outputset = np.mat(labelset[i]).astype(np.float64) #隐层输入 input1 = np.dot(inputset, weight1).astype(np.float64) #隐层输出 #********** Begin **********# #********** End **********# #输出层输入 input2 = np.dot(output2, weight2).astype(np.float64) #输出层输出 output3 = sigmoid(input2 - value2).astype(np.float64) #更新公式由矩阵运算表示 a = np.multiply(output3, 1 - output3) g = np.multiply(a, outputset - output3) b = np.dot(g, np.transpose(weight2)) c = np.multiply(output2, 1 - output2) e = np.multiply(b, c) value1_change = -x * e value2_change = -x * g weight1_change = x * np.dot(np.transpose(inputset), e) weight2_change = x * np.dot(np.transpose(output2), g) #更新连接权重、阈值参数value1、value2、weight1、weight2 #********** Begin **********# #********** End **********# return weight1, weight2, value1, value2 def testing(dataset, labelset, weight1, weight2, value1, value2): #记录预测正确的个数 rightcount = 0 for i in range(len(dataset)): #计算每一个样例通过该神经网路后的预测值 inputset = np.mat(dataset[i]).astype(np.float64) outputset = np.mat(labelset[i]).astype(np.float64) output2 = sigmoid(np.dot(inputset, weight1) - value1) output3 = sigmoid(np.dot(output2, weight2) - value2) #确定其预测标签:输出大于 0.5 置 flag 为 1,否则置 flag 为 0 #********** Begin **********# #********** End **********# if labelset[i] == flag: rightcount += 1 #返回正确率 return rightcount / len(dataset)补全代码实现bp神经网络
最新发布
05-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值