参考网站:Keras官方指南
如果想要看各个神经元最初设定的权重,输入以下程序:
layer = layers.Dense(4)
print(layer.weights)
但出现的结果是:
[]
这是因为在keras程序中,必须先有输入值才会产生权重,不然会出现空集合。因此如果用以下方式:
layer = layers.Dense(4)
y = layer(tf.ones((3,4,2)))
print(layer.weights)
则会产生权重,而且有趣的是,每次执行都会产生不一样的权重,这也表示每次在训练都会以不同值作为训练,不必自己手动调整:
[<tf.Variable 'dense_5/kernel:0' shape=(2, 4) dtype=float32, numpy=
array([[-0.03356194, 0.3569517 , -0.8341913 , 0.73365426],
[-0.10828733, 0.30690932, -0.19653058, 0.02371168]],
dtype=float32)>, <tf.Variable 'dense_5/bias:0' shape=(4,) dtype=float32, numpy=array([0., 0., 0., 0.], dtype=float32)>]
[<tf.Variable 'dense_6/kernel:0' shape=(2, 4) dtype=float32, numpy=
array([[ 0.50712013, -0.64136124, -0.3829267 , 0.5257573 ],
[-0.7684462 , 0.03535271, 0.4861548 , 0.5680456 ]],
dtype=float32)>, <tf.Variable 'dense_6/bias:0' shape=(4,) dtype=float32, numpy=array([0., 0., 0., 0.], dtype=float32)>]
输出结果会发现有两个tf.Variable,前面是只权重的部分,後面是偏差值。
在权重部分中,我看到kernel,以为是只作业系统上的软件和硬体之间的沟通,後来才想到:「这不是作业系统啊」,因此就调查了一下为何机器学习中有kernel。
在机器学习里,kernel可以用来协助区分资料,使得可以更快速建立基本架构,一般来说在低维度的空间,资料可能会混杂在同一个区块中,很难找到适合的线性方式,因此使用kernel可以将基本资料切换成多个维度,从平面变成立体的架构,就有可能可以找到适合的线性方式,不必用非线性的方式了。
上述提到,总结kernel有两个重点:样本的相似性以及加权。不得不说机器学习中有很重要的概念:要得到自己想要的结果,那就在训练集中先找到相似的样本,将那些样本拿来训练,就能得到想要的结果了。因此kernel就可以被用来找到距离最近点进行训练、区分,且距离越近的点所设定的权重会越大,表示相似度越高,最後在用线性回归调整权重数值,以训练玩结果。
输出结果中的array中的各个数字就是各个神经元的权重,在上一篇激励函数中有提到,因为只会看最後一个数来决定该输入层有多少个神经元,因此权重的个数仅有8个,若要表示输入层,则如图(一)。
以tf.ones(3,4,2)格式会是这样:
[[[1. 1.]
[1. 1.]
[1. 1.]
[1. 1.]]
[[1. 1.]
[1. 1.]
[1. 1.]
[1. 1.]]
[[1. 1.]
[1. 1.]
[1. 1.]
[1. 1.]]]
则图(一)的输入层有两个神经元,第一个会取矩阵当中的第一行数字,第二个则取第二行。
最後偏差值的部分,偏差因为是先把资料乘上权重且加总完毕之後,才会加入偏差值,因此可以看到偏差的个数是根据layer个数而定,且目前每个值都是设定为0。
>>: [Python 爬虫这样学,一定是大拇指拉!] DAY22 - 实战演练:HTML Response - 抓取股票代码清单 (1)
其实只是拖延症点到满等的我,说是主角其实只是拖延症发作 有看过某些YT频道的应该有听过这段话 什麽样...
前言 随着 人工智慧(Artificial Intelligence, AI) 的发展越来越快速, ...
import pandas as pd pd.set_option('max_rows', 5) i...
新手发文 Codeigniter如果不调整设定,网址中会自带index.php 为了符合MVC架构,...
Background Goland从1.11版本起就开始导入了GO Module功能,这样也不需要再...