One Shot Learning(单样本学习) with Siamese Networks (孪生网络)using Keras

本文主要是介绍One Shot Learning(单样本学习) with Siamese Networks (孪生网络)using Keras,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录:
1.介绍
2.先验知识
3.classfication vs one shot leanrning
4.应用
5 omnilog 数据集
6.加载数据集
7.映射问题到二分类
8.模型的架构与训练
9.KNN模型
10.随机模型
11.测试结果和展望
12.结论
13.参考文献

1. 介绍
卷积神经网络是图像分类领域的最新方法可以说,但是卷积神经网络我们都知道需要非常庞大的数据集来支撑,万一我们无法收集到这些数据集怎么办呢? one shot learning就来啦~

2.先验知识
有一些关于使用卷积神经网络分类的经验。 但这都无所谓啦~ 学习就是一个漫漫过程。

3. classfication vs one shot learning
如果是流程化的分类操作,则需要把图像经过一层层的网络最后输出。在训练的过程中我们需要给每个类别提供大量的数据,而且我们训练的类别当中不能提供其他的类别(比如你希望分类大象和马,但你不能给一个猫),那如果我们也希望对猫进行分类的话我们就需要首先提供大量猫的数据,然后再对模型重新训练。但是现实世界是复杂变换的我们无法动态的提供大量的数据集。
接下来在one -shot -learning分类中。我们提供一个真实的例子来说明吧,假设我们要为10名员工的小型组织提供人脸识别系统(数量很少),那么如果用传统的分类方法我们会得到如下的系统:
CNN网络
接下来我们的问题:
a): 如果训练这样的模型,我们需要10个人都提供大量的图片,这显然不太可能。
b):如果这个公司流动性很强怎么办,有人加入和退出。
那么现在我们就需要用到 one-shot-learning.
在这里插入图片描述
该网络没有直接把输入的图像进行分类,而是把该人的额外参考图像。然后得到一个相似度得分,通常用softmax函数将这个得分进行压缩。0表示完全不相似,1表示完全相似。

重点:该网络并没有在学习的过程中将图像输出为任何类别,而是在学习相似度函数,将两组图像作为输入,并表示他们的相似度。

这如何解决我们之前讨论的两个问题呢?

a):在非常短的时间内,我们就可以训练好网络,我们不需要过的的数据集,只需要很少的几个实例就可以构建好一个网络。

b):现在再来考虑刚才我们说到的公司员工流动性的问题,假如有人员的加入,为了能使得网络检测到他的人脸,我们只需要将他的脸的单个图像储存在数据库里面即可,使得这张图片作为参考图像,然后通过计算相似度函数来检测。

4.应用
pass

5.Omniglot数据集
我们使用Omnilog数据集,该数据集是来自50个不同字母的1623个手绘字符的集合,每个样本有20个。每个样本都是由不同的人绘制的,每个图像的分辨率都为105*105的灰度图像。 (A-Z的集合称为字母,A,C,D等为字符,所以我们说英文字母有26个字符。)这里我将说明下1653个字符跨越50个字母的意义(也就是说拥有50个集合)
在这里插入图片描述
可以分析得到我们有1653个类,并且对于每个类我们有20个样本。如果我们采用CNN等传统分类方法,那么我们不可能得到很好的结果因为我们的数据集太少。很容易产生过拟合的问题。

6.加载数据集
首先,我们需要将图像加载到张量中去,然后使用这些张量将数据批量提供给模型。我们使用下面的函数将图像加载到张量中去。

def loadimgs(path,n = 0):'''path => Path of train directory or test directory'''X=[]y = []cat_dict = {}lang_dict = {}curr_y = n# we load every alphabet seperately so we can isolate them laterfor alphabet in os.listdir(path):print("loading alphabet: " + alphabet)lang_dict[alphabet] = [curr_y,None]alphabet_path = os.path.join(path,alphabet)# every letter/category has it's own column in the array, so  load seperatelyfor letter in os.listdir(alphabet_path):cat_dict[curr_y] = (alphabet, letter)category_images=[]letter_path = os.path.join(alphabet_path, letter)# read all the images in the current categoryfor filename in os.listdir(letter_path):image_path = os.path.join(letter_path, filename)image = imread(image_path)category_images.append(image)y.append(curr_y)try:X.append(np.stack(category_images))# edge case  - last oneexcept ValueError as e:print(e)print("error - category_images:", category_images)curr_y += 1lang_dict[alphabet][1] = curr_y - 1y = np.vstack(y)X = np.stack(X)return X,y,lang_dict

这篇关于One Shot Learning(单样本学习) with Siamese Networks (孪生网络)using Keras的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/219159

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识