机器学习 逆向传播探索神经网络(人工神经网络到底学到了什么)

本文参考《Python神经网络编程》的相关章节

上文中我们使用神经网络实现对手写数字的识别,那我们反向的给出一个标签,即给出[1, 0, 0, 0, 0, 0, 0, 0, 0, 0],从输出反向推导出输入,应该是什么样子呢?

其实可以想象得到,逆推的结果如果将其实例化,应该是对应的数字图片,图片越清晰,越标准,说明我们的学习效果越好。

对数几率函数的反函数(是叫反函数是吧)为:

在上一篇文章中我们使用的是:

import scipy.special as spc
def sigmoid(z):
	return spc.expit(z)

它的反函数为:

import scipy.special as spc
def reverse_sigmoid(z):
	return spc.logit(z)

 

编码的详细过程我就不细说了,比较简单,不懂得请参考《Python神经网络编程》相关章节

 代码如下:

import numpy as np
import scipy.special as spc
from matplotlib import pyplot as plt

#逆推结果
def reverse_explore(label, weight1, weight2, value1, value2):
	final_outputs = np.array(label, ndmin = 2)
	final_inputs = reverse_sigmoid(final_outputs) + value2

	hidden_outputs = np.dot(final_inputs, weight2.T)

	#数值大小调整到0~1之间
	hidden_outputs -= np.min(hidden_outputs)
	hidden_outputs /= np.max(hidden_outputs)
	hidden_outputs *= 0.98
	hidden_outputs += 0.01

	hidden_inputs = reverse_sigmoid(hidden_outputs) + value1

	inputs = np.dot(hidden_inputs, weight1.T)

	#数值大小调整到0~1之间
	inputs -= np.min(inputs)
	inputs /= np.max(inputs)
	inputs *= 0.98
	inputs += 0.01

	return inputs

import scipy.special as spc
def reverse_sigmoid(z):
	return spc.logit(z)

#用于读取之前保存的参数文件
def read_parameter(filename):
	parameter = []
	for i in filename:
		fp = open(i, 'r')
		dataset = []
		for j in fp.readlines():
			a = j.strip().split(' ')
			dataset.append([float(k) for k in a])
		parameter.append(np.array(dataset))
	return parameter

if __name__ == '__main__':
	#读取训练好的参数
	filename = ['weight1.txt', 'weight2.txt', 'value1.txt', 'value2.txt']
	parameter = read_parameter(filename)
	weight1 = parameter[0]
	weight2 = parameter[1]
	value1 = parameter[2]
	value2 = parameter[3]

	#对为一种标签,求其逆推结果
	for i in range(10):
		label = [0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01]
		label[i] = 0.99
		inputs = reverse_explore(label, weight1, weight2, value1, value2)

		#对结果可视化
		plt.imshow(inputs.reshape(28, 28), cmap = 'Greys', interpolation = 'None')
		plt.show()

 其中直接使用已经训练好的参数,大家可以用自己训练出来的参数,如果嫌麻烦,可以下载我的训练结果(文件)

先关文件和源代码已上传至我的资源:https://download.csdn.net/download/qq_41398808/11232517

一下一次列出0~9的逆推结果可视化后的图像:

0

 

1

 

2

 

3

 

4

 

5

 

 

6

 

 

7

 

 

8

 

 

9

 

 

可以看出和我们想象的结果是一致的 ,人工神经网络最终学到了,样例的一般特点(属性),所以从大体上可以看出逆推出来的是什么,但是又受到不同样例的特有特点(属性)的影响,所以逆推结果的边界十分模。

不得不感慨人工智能,机器学习中的种种算法是多么的有趣,多么的神奇啊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫猫虫(——)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值