keras 的 example 文件 mnist_siamese.py 解析
该程序是介绍了一个孪生神经网络,大致就是给出两张图片,比较两张图片的相似性,比如人脸对比等
这里的数据集是mnist,代码中首先会建立一些图片对,就是pairs,如果是同类的图片,则把y值设置为 1,如果是不同类的图片,则把 y 值设置为 0;y值就是相似度
基础神经网络结构为:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) (None, 28, 28) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 784) 0
_________________________________________________________________
dense_1 (Dense) (None, 128) 100480
_________________________________________________________________
dropout_1 (Dropout) (None, 128) 0
_________________________________________________________________
dense_2 (Dense) (None, 128) 16512
_________________________________________________________________
dropout_2 (Dropout) (None, 128) 0
_________________________________________________________________
dense_3 (Dense) (None, 128) 16512
=================================================================
Total params: 133,504
Trainable params: 133,504
Non-trainable params: 0
_________________________________________________________________
None
就是给一个数字图片,经过一堆计算之后,会生成一个128维的向量,
然后计算两张图片的运算结果向量之间的欧氏距离,也就是函数 euclidean_distance,向量平方和再开方,其值肯定是一个整数
我们猜想一下,如果两张图片,送的数据一模一样,那么其距离结果肯定为 0,如果完全不同的两张图片,那么运算结果也应该是一个很大的数
下面是一个自定义的损失函数 contrastive_loss,损失函数的参数为 预期值 和 实际运算结果;
这里再强调一下,y_pred 的值肯定不会小于 0,因为是平方和,再开方,肯定大于等于 0
损失函数的返回值为:
return y_true * square_pred + (1 - y_true) * margin_square
因为 y_true 是我们在数据集预处理中设置的,其值可能为 0 ,或 1,
如果 y_true 为 1,也就是两张图片预期一样时,则返回结果可以简化为 square_pred
square_pred 就是欧氏距离;
如果 y_true 为 0, 也就是两张图片预期不一样时,则返回结果可以简化为 margin_square;
margin_square = K.square(K.maximum(margin - y_pred, 0))
损失函数就是,在结果符合预期时,损失值很小,在不符合预期时,损失值很大;
margin_square 就是 (1 - 欧氏距离)的平方,比如传了一个1,一个2,那么欧氏距离应该是很大,比如 y_pred 值为0.9,那就是符合预期,(1 - y_pred)**2,结果为 0.01,损失就很小;
而如果传了不同的两个值,一个1,一个2,结果欧式距离很小,比如 y_pred 值为 0.01,那么损失函数应该很大,这里确实很大,0.99 ** 2,差不多为 1 了,需要神经网络进行优化;
但如果传入的是两个不同的图片,计算结果 y_pred 为 10,那其实也是符合预期,反正两张不同的图片 y_pred 越大越好,那么这时候计算 K.maximum(margin - y_pred, 0) 就是 K.maximum(-9, 0),也就是 0,损失为0
其他就没有什么难点了
keras 的 example 文件 mnist_siamese.py 解析相关推荐
- keras 的 example 文件 cnn_seq2seq.py 解析
该代码是实现一个翻译功能,好像是英语翻译为法语,嗯,我看不懂法语 首先这个代码有一个bug,本人提交了一个pull request来修复, https://github.com/keras-team/ ...
- keras 的 example 文件 cifar10_resnet.py 解析
该代码功能是卷积神经网络进行图像识别,数据集是cifar10 同时演示了回调函数 ModelCheckpoint, LearningRateScheduler, ReduceLROnPlateau 的 ...
- keras 的 example 文件 babi_rnn.py 解析
该代码的目的和 https://blog.csdn.net/zhqh100/article/details/105193991 类似 数据集也是同一个数据集,只不过这个是从 qa2_two-suppo ...
- keras 的 example 文件 mnist_hierarchical_rnn.py 解析
很显然,我没有看懂 HRNN 是啥意思,没有去看论文,应该就是一种RNN结构的变形吧 网络结构如下: _________________________________________________ ...
- keras 的 example 文件 mnist_denoising_autoencoder.py 解析
mnist_denoising_autoencoder.py 是一个编解码神经网络,其意义就是如果图片中有噪点的话,可以去除噪点,还原图片 其编码网络为: ______________________ ...
- keras 的 example 文件 mnist_cnn.py 解析
mnist_cnn.py 基本上就是最简单的一个卷积神经网络了,其结构如下: _____________________________________________________________ ...
- keras 的 example 文件 imdb_bidirectional_lstm.py 解析
imdb是一个文本情感分析的数据集,通过评论来分析观众对电影是好评还是差评 其网络结构比较简单 ____________________________________________________ ...
- keras 的 example 文件 lstm_text_generation.py 解析
该程序是学习现有的文章,然后学习预测下个字符,这样一个字符一个字符的学会写文章 先打印下char_indices {'\n': 0, ' ': 1, '!': 2, '"': 3, &quo ...
- keras 的 example 文件 lstm_stateful.py 解析
该程序要通过一个LSTM来实现拟合窗口平均数的功能 先看输入输出数据, print(x_train[:10]) [[[-0.08453234]][[ 0.02169589]][[ 0.07949955 ...
最新文章
- R语言中if else、which、%in%的用法
- 中北大学c语言程序设计作业答案,2016年中北大学软件学院程序设计基础考研复试题库...
- 把别人的Tcl/Tk代码加入到Go语言里12 游戏5 画图案?
- linux shutter截图,Ubuntu中安装Shutter截图工具
- SpringBoot整合MyBatis-Plus分页查询
- wxWidgets:显示 wxTreeListCtrl 的示例
- GDCM:gdcm::GroupDict的测试程序
- vs2013 无法打开 源 文件 SDKDDKVer.h
- eclipse2019-03设置代码编辑区背景为图片
- BBIAB的完整形式是什么?
- CMake file文件操作命令
- Rails中select2 实现多选框的效果
- Windows不同压缩软件、压缩算法、压缩率详细对比测试与选择
- c语言10以内随机数生成器,C语言随机数生成器
- Gerber 格式详解
- 迭代器的定义与自定义一个迭代器
- 根据药物名找华法林的代谢通路并可视化KGML文件
- Jlink在ADS下的配置说明及常见问题解决办法 (转载)
- RPA(Robotic Process Automation)的概要介绍
- 2021年茶艺师(初级)证考试及茶艺师(初级)模拟考试题库
热门文章
- 20172329 2017-2018-2 《程序设计与数据结构》实验五报告
- JavaScript对象掺杂点原型
- Oracle开发:normal ,sysdba,sysoper区别
- 函数指针amp;绑定: boost::functoin/std::function/bind
- [nowCoder] 局部最小值位置
- 6月11号=》121页-125页
- js判断 IE 浏览器
- 《OpenCV3编程入门》学习笔记6 图像处理(二)非线性滤波:中值滤波、双边滤波
- php 英文小写变大写,PHP英文字母大小写转换函数
- java 变量的线程可见性_Java多线程——变量可见性