python建立神经网络_python 三层 神经网络搭建

1 importnumpy2 importscipy.special3 importscipy.ndimage.interpolation4 #import matplotlib.pyplot

5 importtime6 importstring7 from random importshuffle8

9 importmatplotlib.pyplot10

11

12

13 classNeuralNetwork:14

15 #初始化神经网络

16 def __init__(self, inputnodes, hiddenodes, outputnodes, learningrate):17 #设置输入层、隐藏层、输出层的节点数

18 self.inodes =inputnodes19 self.hnodes =hiddenodes20 self.onodes =outputnodes21

22 #学习因子

23 self.lr =learningrate24

25 #输入层、隐藏层、输出层之间的链接权重

26 #self.wih = (numpy.random.rand(self.hnodes, self.inodes) - 0.5)

27 #self.who = (numpy.random.rand(self.onodes, self.inodes) - 0.5)

28 #利用正态分布采样权重

29 self.wih = numpy.random.normal(0.0, pow(self.hnodes, - 0.5), (self.hnodes, self.inodes))30 self.who = numpy.random.normal(0.0, pow(self.onodes, - 0.5), (self.onodes, self.hnodes))31

32 #S函数

33 self.activation_function = lambdax: scipy.special.expit(x)34 self.inverse_activation_function = lambdax: scipy.special.logit(x)35 pass

36

37 #训练

38 deftrain(self, inputs_list, targets_list):39 #输入层转矩阵

40 inputs = numpy.array(inputs_list, ndmin=2).T41 targets = numpy.array(targets_list, ndmin=2).T42

43 #隐藏层输入=权重点乘输入层矩阵

44 hidden_inputs =numpy.dot(self.wih, inputs)45 #隐藏层应用S函数

46 hidden_outputs =self.activation_function(hidden_inputs)47

48 #输出层输入=权重点乘隐藏层输入矩阵

49 final_inputs =numpy.dot(self.who, hidden_outputs)50 #输出层输入应用S函数

51 final_outputs =self.activation_function(final_inputs)52

53 #计算误差

54 output_errors = targets -final_outputs55 #计算隐藏层误差

56 hidden_errors =numpy.dot(self.who.T, output_errors)57 #更新隐藏层和输出层之间的权重

58 self.who += self.lr * numpy.dot((output_errors * final_outputs * (1.0 -final_outputs)),59 numpy.transpose(hidden_outputs))60 #更新输入层和隐藏层之间的权重

61 self.wih += self.lr * numpy.dot((hidden_errors * hidden_outputs * (1.0 -hidden_outputs)),62 numpy.transpose(inputs))63

64 pass

65

66 #查询

67 defquery(self, inputs_list):68 #输入层转矩阵

69 inputs = numpy.array(inputs_list, ndmin=2).T70

71 #隐藏层输入=权重点乘输入层矩阵

72 hidden_inputs =numpy.dot(self.wih, inputs)73 #隐藏层应用S函数

74 hidden_outputs =self.activation_function(hidden_inputs)75

76 #输出层输入=权重点乘隐藏层输入矩阵

77 final_inputs =numpy.dot(self.who, hidden_outputs)78 #输出层输入应用S函数

79 final_outputs =self.activation_function(final_inputs)80

81 returnfinal_outputs82

83 defback_query(self, targets_list):84 #transpose the targets list to a vertical array

85 final_outputs = numpy.array(targets_list, ndmin=2).T86

87 #calculate the signal into the final output layer

88 final_inputs =self.inverse_activation_function(final_outputs)89

90 #calculate the signal out of the hidden layer

91 hidden_outputs =numpy.dot(self.who.T, final_inputs)92 #scale them back to 0.01 to .99

93 hidden_outputs -=numpy.min(hidden_outputs)94 hidden_outputs /=numpy.max(hidden_outputs)95 hidden_outputs *= 0.98

96 hidden_outputs += 0.01

97

98 #calculate the signal into the hidden layer

99 hidden_inputs =self.inverse_activation_function(hidden_outputs)100

101 #calculate the signal out of the input layer

102 inputs =numpy.dot(self.wih.T, hidden_inputs)103 #scale them back to 0.01 to .99

104 inputs -=numpy.min(inputs)105 inputs /=numpy.max(inputs)106 inputs *= 0.98

107 inputs += 0.01

108

109 returninputs110

111

112 #验证码,10个数字+26个大小写字母97-122

113 codes = list(string.digits +string.ascii_lowercase)114 #输入、隐藏、输出三层节点数

115 input_nodes = 45 * 100

116 #四位验证码

117 output_nodes =(len(codes))118 hidden_nodes = output_nodes * 10

119

120

121 #学习因子

122 learning_rate = 0.2

123

124 #创建神经网络

125 n =NeuralNetwork(input_nodes, hidden_nodes, output_nodes, learning_rate)126

127 #读取训练数据

128 #training_data_file = open("web/mnist_dataset/mnist_train_100.csv")

129 training_data_file = open("web/train.csv")130 training_data_list =training_data_file.readlines()131 shuffle(training_data_list)132 training_data_file.close()133

134

135 #世代,所有数据训练一遍为一个世代

136 epochs = 1

137 print("输入节点=%d,隐藏节点=%d,输出节点=%d,学习因子=%f,时代=%d" %(input_nodes, hidden_nodes, output_nodes, learning_rate, epochs))138 print("开始训练...")139 start =int(time.time())140 for e inrange(epochs):141 #训练神经网络

142 for record intraining_data_list:143 #按逗号切分成数组

144 all_values = record.split(",")145 #缩放并转换成0.01到0.99之间的数组

146 train_inputs = (numpy.asfarray(all_values[1:]) / 255.0 * 0.99) + 0.01

147 #旋转正负10度

148 train_inputs_plus_10 = scipy.ndimage.interpolation.rotate(train_inputs.reshape(1, 4500), 10, cval=0.01,149 reshape=False)150 train_inputs_minus_10 = scipy.ndimage.interpolation.rotate(train_inputs.reshape(1, 4500), -10, cval=0.01,151 reshape=False)152

153 #构建真实输出数组,除了目标位置是0.99,其他都是0.01

154 train_targets = numpy.zeros(output_nodes) + 0.01

155 code =all_values[0]156 train_targets[codes.index(code)] = 0.99

157 n.train(train_inputs, train_targets)158 n.train(train_inputs_plus_10, train_targets)159 n.train(train_inputs_minus_10, train_targets)160 pass

161 pass

162 end =int(time.time())163 print("训练用时=", end - start, "秒")164

165 #测试数据

166 #test_data_file = open("web/mnist_dataset/mnist_test_10.csv")

167 #test_data_file = open("web/mnist_dataset/mnist_test.csv")

168 test_data_file = open("web/test.csv")169 test_data_list =test_data_file.readlines()170 test_data_file.close()171 #all_values = test_data_list[0].split(",")

172 #image_array = numpy.asfarray(all_values[1:]).reshape((28, 28))

173 #matplotlib.pyplot.imshow(image_array, cmap='Greys', interpolation='None')

174 #175 #value = n.query((numpy.asfarray(all_values[1:]) / 255.0 * 0.99) + 0.01)

176 #print(value)

177

178 #统计分数

179 scorecard =[]180

181 print("开始测试...")182 start =int(time.time())183 #检查所有测试数据

184 for record intest_data_list:185 all_values = record.split(",")186 #正确答案

187 correct_label =(all_values[0])188 #print(correct_label, "正确答案")

189

190 verify_inputs = (numpy.asfarray(all_values[1:]) / 255.0 * 0.99) + 0.01

191 verify_outputs =n.query(verify_inputs)192 #print(verify_outputs)

193 label =codes[numpy.argmax(verify_outputs)]194 #print(label, "神经网络答案")

195

196 if label ==correct_label:197 scorecard.append(1)198 else:199 scorecard.append(0)200 pass

201 pass

202 end =int(time.time())203 print("检查用时=", end - start, "秒")204

205 #print(scorecard)

206 scorecard_array =numpy.asarray(scorecard)207 print("正确率=", scorecard_array.sum() /scorecard_array.size)208

209 label =0210 #create the output signals for this label

211 targets = numpy.zeros(output_nodes) + 0.01

212 #all_values[0] is the target label for this record

213 targets[label] = 0.99

214 #print(targets)

215

216 #get image data

217 image_data =n.back_query(targets)218 #print(image_data)

219

220 #plot image data

221 matplotlib.pyplot.imshow(image_data.reshape(45, 100), cmap='Greys', interpolation='None')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值