人工智能有能力创造出看起来像人类的面孔吗

人工智能有能力创造出看起来像人类的面孔吗,第1张

如果你不懂这个AI的子领域,这应该是所有初学者都要读的通用GAN文章——开玩笑的,我也不太懂,所以我们扯平了。GAN(生成式对抗网络)是由Ian Goodfellow及其同事在2014年首次提出的一个框架。训练它从随机噪声和像素映射生成图像。例如,我们可以用MNIST教会机器识别所有基于文本和基于绘图的计算:

GAN通常有两个部分使它如此准确和美妙(如果你是初学者,请阅读这篇文章):图像或感觉发生器,根据它的知识,以它认为正确的方式产生图像。有一个分类器来比较真正的生成猜测和一个完全不正确的假猜测。

随着时间的推移,它会建立一个随机面孔的模型,这个模型和它的数据集一样真实,然后询问测试者这个模型是正确的还是假的。从更有经验的角度来看(如果你是一名程序员,请阅读这篇文章):

生成器以潜在样本的形式获取输入——这些是自动调整训练数据的NumPy数组——通常被认为是数值权重。一旦正确训练,该机器产生的产品,其潜伏样品调整到尽可能准确。这可以用Keras或TensorFlow或像tinygrad这样的古怪模块来完成。v

我们用特定的色调绘制所有图像并使用tanh激活,这意味着我们还必须将数据库图像集的大小调整为权值-1和1之间。识别器是一个训练有素的有监督的(或者无监督的,这是非常令人印象深刻的)分类器,它对图像的真伪(1)进行评级。

输入要么是像素化的模糊混乱,要么是数据集的真实猜测。把这两种物质放在一起,我们就可以创造出真正的GAN。仍然有一些要点需要覆盖,但Quora的回复框是非常坏的:记住,训练真正的GAN也意味着训练一个鉴别器的像素混乱。你不可能永远停留在生成图像的下象限,对吧

问题来源于2021年MCM C题,官方给出的数据中既包含图像,又包含常规的文本,数字向量数据,若要同时利用上这些数据,可以搭建一种包含两个输入层的模型,一个用于处理图像,另一个用于处理常规向量(还有一种方式是定义一个输入数据的类,在这个类中集合图像和向量)。

对于处理图像的网络结构,我是直接使用了Vgg-16的网络结构,去掉了最后三个全连接层,处理向量的网络结构是我自己搭建的全连接网络,模型结构图如下:

导包

首先加载Vgg-16网络

搭建左边的模型

获取左边模型的输入和输出,这里input_left和output_left的数据类型是KerasTensor

搭建右侧的模型并获取模型的输入和输出

合并两个模型

搭建网络的剩余部分

参数说明:

BP算法的基本思想是:学习过程由信号正向传播与误差的反向回传两个部分组成;正向传播时,输入样本从输入层传入,经各隐层依次逐层处理,传向输出层,若输出层输出与期望不符,则将误差作为调整信号逐层反向回传,对神经元之间的连接权矩阵做出处理,使误差减小。经反复学习,最终使误差减小到可接受的范围。具体步骤如下:

1、从训练集中取出某一样本,把信息输入网络中。

2、通过各节点间的连接情况正向逐层处理后,得到神经网络的实际输出。

3、计算网络实际输出与期望输出的误差。

4、将误差逐层反向回传至之前各层,并按一定原则将误差信号加载到连接权值上,使整个神经网络的连接权值向误差减小的方向转化。

5、対训练集中每一个输入—输出样本对重复以上步骤,直到整个训练样本集的误差减小到符合要求为止。

批量获取:

keras 多张:

很多情况下,你并不能使用以上这些方法来直接输入数据去训练或者预测,原因是你的数据集太大了,没办法把所有的都载入到内存当中。那keras的data generator就派上用场了,当你的模型需要训练数据的时候,generator会自动从cpu生成一批,喂到GPU里面让模型进行训练,依次循环,直到训练结束。

压缩数据中维度为1的维度, numpysqueeze()

模型是不能直接对进行卷积 *** 作的,必须先转化为numpy数组才能输入模型里面去,而且如果数据集的尺寸不统一,也有不同的 *** 作细节。

keras 模型保存路径: C:\Users\你的用户名keras\models

notop代表是否包括顶层的全连接层,默认include_top=True,包括全连接层。

tf -- tensorflow 或者 CNTK

th -- theano

GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名GitHub。作为开源代码库以及版本控制系统,Github拥有超过900万开发者用户。随着越来越多的应用程序转移到了云上,Github已经成为了管理软件开发以及发现已有代码的首选方法。在GitHub,用户可以十分轻易地找到海量的开源代码。

下面给大家介绍一些GitHub上25个开源项目:

(1)TensorFlow Models

如果你对机器学习和深度学习感兴趣,一定听说过TensorFlow。TensorFlow Models是一个开源存储库,可以找到许多与深度学习相关的库和模型。

(GitHub: >

(2)Keras

Keras是一个高级神经网络API,用Python编写,能够在TensorFlow,CNTK或Theano之上运行。旨在完成深度学习的快速开发(GitHub: >

(3)Flask

Flask 是一个微型的 Python 开发的 Web 框架,基于Werkzeug  WSGI工具箱和Jinja2 模板引擎,使用BSD授权。

(GitHub: >

(4)scikit-learn

scikit-learn是一个用于机器学习的Python模块,基于 NumPy、SciPy 和 matplotlib 构建。,并遵循 BSD 许可协议。

(GitHub: >

(5)Zulip

Zulip是一款功能强大的开源群聊应用程序,它结合了实时聊天的即时性和线程对话的生产力优势。Zulip作为一个开源项目,被许多世界500强企业,大型组织以及其他需要实时聊天系统的用户选择使用,该系统允许用户每天轻松处理数百或数千条消息。Zulip拥有超过300名贡献者,每月合并超过500次提交,也是规模最大,发展最快的开源群聊项目。

(GitHub: >

:《Python入门教程》

(6)Django

Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 Web 应用程序框架,旨在快速开发出清晰,实用的设计。使用 Django,我们在几分钟之内就可以创建高品质、易维护、数据库驱动的应用程序。

(GitHub: >

(7)Rebound

Rebound 是一个当你得到编译错误时即时获取 Stack Overflow 结果的命令行工具。 就用 rebound 命令执行你的文件。这对程序员来说方便了不少。

(GitHub: >

(8)Google Images Download

这是一个命令行python程序,用于搜索Google Images上的关键字/关键短语,并可选择将图像下载到您的计算机。你也可以从另一个python文件调用此脚本。

(GitHub: >

(9)YouTube-dl

youtube-dl 是基于 Python 的命令行媒体文件下载工具,完全开源免费跨平台。用户只需使用简单命令并提供在线视频的网页地址即可让程序自动进行嗅探、下载、合并、命名和清理,最终得到已经命名的完整视频文件。

(GitHub: htt ps://githubcom/rg3/youtube-dl )

(10)System Design Primer

此repo是一个系统的资源集合,可帮助你了解如何大规模构建系统。

(GitHub: >

(11)Mask R-CNN

Mask R-CNN用于对象检测和分割。这是对Python 3,Keras和TensorFlow的Mask R-CNN实现。该模型为图像中对象的每个实例生成边界框和分割蒙版。它基于特Feature Pyramid Network(FPN)和 ResNet101 backbone。

(GitHub: >

(12)Face Recognition

Face Recognition 是一个基于 Python 的人脸识别库,使用十分简便。这还提供了一个简单的face_recognition命令行工具,可以让您从命令行对图像文件夹进行人脸识别!

(GitHub: >

(13)snallygaster

用于扫描>

(GitHub: >

(14)Ansible

Ansible是一个极其简单的IT自动化系统。它可用于配置管理,应用程序部署,云配置,支持远程任务执行和多节点发布 - 包括通过负载平衡器轻松实现零停机滚动更新等 *** 作。

(GitHub: >

(15)Detectron

Detectron是Facebook AI 研究院开源的的软件系统,它实现了最先进的目标检测算法,包括Mask R-CNN。它是用Python编写的,由Caffe2深度学习框架提供支持。

(16)asciinema

终端会话记录器和asciinemaorg的最佳搭档。

(GitHub: >

(17)>

>

(GitHub: >

(18)You-Get

You-Get是一个小型命令行实用程序,用于从Web下载媒体内容(视频,音频,图像),支持国内外常用的视频网站。

(GitHub: >

(19)Sentry

Sentry从根本上讲是一项服务,可以帮助用户实时监控和修复崩溃。基于Django构建,它包含一个完整的API,用于从任何语言、任何应用程序中发送事件。

(GitHub: >

(20)Tornado

Tornado是使用Python开发的全栈式(full-stack)Web框架和异步网络库,,最初是由FriendFeed上开发的。通过使用非阻塞网络I / O,Tornado可以扩展到数万个开放连接,是long polling、WebSockets和其他需要为用户维护长连接应用的理想选择。

(GitHub: >

(21)Magenta

Magenta是一个探索机器学习在创造艺术和音乐过程中的作用的研究项目。这主要涉及开发新的深度学习和强化学习算法,用于生成歌曲,图像,绘图等。但它也是构建智能工具和界面的探索,它允许艺术家和音乐家使用这些模型。

(GitHub: >

(22)ZeroNet

ZeroNet是一个利用比特币的加密算法和BitTorrent技术提供的不受审查的网络,完全开源。

(GitHub: >

(23)Gym

OpenAI Gym是一个用于开发和比较强化学习算法的工具包。这是Gym的开源库,可让让你访问标准化的环境。

(GitHub: >

(24)Pandas

Pandas是一个Python包,提供快速,灵活和富有表现力的数据结构,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地 *** 作大型数据集所需的工具。此外,它还有更广泛的目标,即成为所有语言中最强大,最灵活的开源数据分析/ *** 作工具。它目前已经朝着这个目标迈进。

(GitHub: >

(25)Luigi

Luigi 是一个 Python 模块,可以帮你构建复杂的批量作业管道。处理依赖决议、工作流管理、可视化展示等等,内建 Hadoop 支持。(GitHub: >

《Keras快速上手:基于Python的深度学习实战》(谢梁)电子书网盘下载免费在线阅读

5157

书名:Keras快速上手:基于Python的深度学习实战

作者:谢梁

豆瓣评分:47

出版社:电子工业出版社

出版年份:2017-8

页数:272

内容简介:

《Keras快速上手:基于Python的深度学习实战》系统地讲解了深度学习的基本知识、建模过程和应用,并以深度学习在推荐系统、图像识别、自然语言处理、文字生成和时间序列中的具体应用为案例,详细介绍了从工具准备、数据获取和处理到针对问题进行建模的整个过程和实践经验,是一本非常好的深度学习入门书。

不同于许多讲解深度学习的书籍,《Keras快速上手:基于Python的深度学习实战》以实用为导向,选择了 Keras 作为编程框架,强调简单、快速地设计模型,而不去纠缠底层代码,使得内容相当易于理解,读者可以在 CNTK、 TensorFlow 和 Theano 的后台之间随意切换,非常灵活。并且本书能帮助读者从高度抽象的角度去审视业务问题,达到事半功倍的效果。

从零开始用Python构建神经网络

动机:为了更加深入的理解深度学习,我们将使用 python 语言从头搭建一个神经网络,而不是使用像 Tensorflow 那样的封装好的框架。我认为理解神经网络的内部工作原理,对数据科学家来说至关重要。

这篇文章的内容是我的所学,希望也能对你有所帮助。

神经网络是什么

介绍神经网络的文章大多数都会将它和大脑进行类比。如果你没有深入研究过大脑与神经网络的类比,那么将神经网络解释为一种将给定输入映射为期望输出的数学关系会更容易理解。

神经网络包括以下组成部分

一个输入层,x

任意数量的隐藏层

一个输出层,

每层之间有一组权值和偏置,W and b

为隐藏层选择一种激活函数,σ。在教程中我们使用 Sigmoid 激活函数

下图展示了 2 层神经网络的结构(注意:我们在计算网络层数时通常排除输入层)

2 层神经网络的结构

用 Python 可以很容易的构建神经网络类

训练神经网络

这个网络的输出 为:

你可能会注意到,在上面的等式中,输出 是 W 和 b 函数。

因此 W 和 b 的值影响预测的准确率 所以根据输入数据对 W 和 b 调优的过程就被成为训练神经网络。

每步训练迭代包含以下两个部分:

计算预测结果 ,这一步称为前向传播

更新 W 和 b,,这一步成为反向传播

下面的顺序图展示了这个过程:

前向传播

正如我们在上图中看到的,前向传播只是简单的计算。对于一个基本的 2 层网络来说,它的输出是这样的:

我们在 NeuralNetwork 类中增加一个计算前向传播的函数。为了简单起见我们假设偏置 b 为0:

但是我们还需要一个方法来评估预测结果的好坏(即预测值和真实值的误差)。这就要用到损失函数。

损失函数

常用的损失函数有很多种,根据模型的需求来选择。在本教程中,我们使用误差平方和作为损失函数。

误差平方和是求每个预测值和真实值之间的误差再求和,这个误差是他们的差值求平方以便我们观察误差的绝对值。

训练的目标是找到一组 W 和 b,使得损失函数最好小,也即预测值和真实值之间的距离最小。

反向传播

我们已经度量出了预测的误差(损失),现在需要找到一种方法来传播误差,并以此更新权值和偏置。

为了知道如何适当的调整权值和偏置,我们需要知道损失函数对权值 W 和偏置 b 的导数。

回想微积分中的概念,函数的导数就是函数的斜率。

梯度下降法

如果我们已经求出了导数,我们就可以通过增加或减少导数值来更新权值 W 和偏置 b(参考上图)。这种方式被称为梯度下降法。

但是我们不能直接计算损失函数对权值和偏置的导数,因为在损失函数的等式中并没有显式的包含他们。因此,我们需要运用链式求导发在来帮助计算导数。

链式法则用于计算损失函数对 W 和 b 的导数。注意,为了简单起见。我们只展示了假设网络只有 1 层的偏导数。

这虽然很简陋,但是我们依然能得到想要的结果—损失函数对权值 W 的导数(斜率),因此我们可以相应的调整权值。

现在我们将反向传播算法的函数添加到 Python 代码中

为了更深入的理解微积分原理和反向传播中的链式求导法则,我强烈推荐 3Blue1Brown 的如下教程:

Youtube:>

以上就是关于人工智能有能力创造出看起来像人类的面孔吗全部的内容,包括:人工智能有能力创造出看起来像人类的面孔吗、Keras如何合并两个模型、什么是BP神经网络等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9496935.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)