《Python深度学习实战:基于TensorFlow和Keras的聊天机器人》 —2.1.3 定义模型
2.1.3 定义模型
在Keras中序列模型被定义成层的序列。你可以创建一个序列模型再添加层。你需要确保输入层有正确的输入数。假设你有3072个输入变量,然后你要创建的第一个隐层具有512个节点/神经元。在第二个隐层,你有120个节点/神经元。最后,在输出层有10个节点。举例来说,一张图片映射到10个节点上,这10个节点分别对应该图为标签1(飞机)、标签2(汽车)、标签3(猫)......标签10(货车)的概率。具有最大概率的节点就是所预测的类或标签。
一张图片包含三个通道(RGB),在每个通道中,图片都有32×32 = 1024个像素。因此,每张图片都有3×1024 = 3072个像素(特征/X/输入)。
利用这3072个特征,你需要预测它是标签1(数字0)、标签2(数字1)等的概率。这意味着模型预测10个输出(数字0~9),其中每个输出代表对应标签的概率。最后一个激活函数(之前介绍过的Sigmoid函数)在输出时给出9个0值和一个为1的输出。这个输出为1的节点的标签就是对于该图片的预测分类(图2-1)。
图2-1 定义模型
其网络结构好比如此:3072个特征→512个节点→120个节点→10个节点。
下一个问题就是,你怎么知道要用多少层和用什么类型呢?没有人知道准确的答案。对于评估度量最好的就是你自己决定最适合的层数、参数以及每一层的步骤。也可以用一些试探性的方法。最好的网络结构是通过一系列的试错过程来找到的。一般来讲,你需要一个足够大能够捕捉到你所研究问题的所有结构特征的网络。
在这个例子里面,你将使用一个具有三层的全连接网络结构。用一个名为Dense的类来定义全连接层。
这样,你初始化的网络权重值为从一个均匀分布生成的很小的随机数,这里是处于0~0.05之间的数,因为这是Keras中默认的均匀权重初始化值。另一个习惯使用的是从高斯分布抽样得到的随机数。你可以用0.5的默认阈值设定来进行硬分类。并可以通过逐层添加来将它们都拼接起来。
- 点赞
- 收藏
- 关注作者
评论(0)