Python怎么提取图像颜色?
回答:python;提取图像颜色的方法如下::。
#-*-coding:CP936-*-
从ctypes导入*
#介绍winapi
gdi32
用户32
#获取句柄
hdc(无)
#获取指定像素的颜色
c(hdc,100,50)
#打印从十进制转换为十六进制的颜色。
打印十六进制(c).
仅供你参考。
如何使用Keras函数式API进行深度学习?
可以说,KerasPython库使得创建深度学习模型变得快速而简单。
sequenceAPI使您能够为大多数问题逐层创建模型。当然也是有限制的,就是不允许你创建共享层或者多输入多输出的模型。
Keras中的函数式API是创建模型的另一种,它具有更大的灵活性,包括创建更复杂的模型。
在本教程中,您将学习如何使用Keras中更灵活的函数式API来定义深度学习模型。
完成本教程后,您将了解:
顺序API和函数API的区别。
如何使用函数式API定义简单的多层感知器、卷积神经网络和循环神经网络模型?
如何定义一个具有共享层和多个输入输出的更复杂的模型。
教程概述
本教程涵盖六个部分,即:
顺序模型
功能模型
3.标准网络模型
4.共享层模型
5.多输入多输出模型
6.最佳实践
序列模型
Keras提供了一个序列模型API。
这是一种创建深度学习模型的方法,其中创建一个序列类的实例,并创建一个模型层并添加到其中。
例如,您可以将层定义为数组,并将其传递给序列:
从导入序列
从导入密集
模型顺序([密集(2,input_dim1),密集(1)])
此外,还可以分段添加层:
模型顺序()
(Dense(2,input_dim1))
(密集(1))
可以说,在大多数情况下,序列模型API非常适合开发深度学习模型,但也有一定的局限性。
例如,定义一个可能有多个不同的输入源并可以生成多个输出目标或重用层的模型并不容易。
KerasfunctionalAPI提供了一种更灵活的来定义模型。
特别是,它使您能够决定意味着具有多个输入或输出以及共享层的模型。不仅如此,它还使你能够定义一个特定的非循环网络图。
通过创建层的实例并将它们直接成对连接,然后定义模型,将层指定为模型的输入和输出,来定义模型。
接下来,让我们让我们来看看KerasfunctionalAPI的三个独特方面:
定义输入
与顺序模型不同,您必须创建和定义独立的输入图层来指定输入数据的形状。
输入层接受一个形状参数,即一个元组,它表示输入数据的维度。。
如果输入数据是一维的,比如多层感知器,那么这个形状必须能够清晰地为训练网络划分数据过程中使用的小批量的形状留出空间。因此,此形状数组始终由最后一个维度(2)定义,例如:
从导入输入
可见输入(形状(2,)
关节层
模型中的层是成对连接的。
这是通过在定义每个新层时指定输入源来实现的。这里使用括号符号,以便在创建层之后,指定来自当前层输入源的层。
让让我们用一个简短的例子来说明这一点。我们可以如上所述创建输入层,然后创建一个隐藏层作为密集层,只接受来自输入层的输入。
隐密(2)(可见)
注意能见度。创建密集图层后,将输入图层的输出与密集隐藏图层连接作为输入。
通过这种,各层可以一个接一个地连接起来,从而使功能API变得灵活。例如,您可以看到开始定义临时层图是多么容易。
创建模型
在创建所有模型层并将它们连接在一起之后,您必须定义模型。
像sequenceAPI一样,模型是你可以总结、拟合、评估和预测的东西。
Keras提供了一个模型类,您可以使用它从创建的层创建一个模型。要求是您只能指定输入和输出层。例如:
从导入模型
模型模型(inputsvisible,outputshidden)
现在我们已经知道了KerasfunctionalAPI的所有关键部分,让让我们定义一组不同的模型,并对它们进行一些练习。
每个示例都是可执行的,显示结构并创建图的图表。这样做的好处是,你可以清楚地知道你在定义什么。
希望以后你想用函数式API定义自己的模型时,这些例子能给你提供模板。
开始使用函数式API时,最好先了解一些标准的神经网络模型是如何定义的。
在本节中,我们将定义一个简单的多层感知器,卷积神经网络和循环神经网络。
这些例子将为理解下面更详细的例子打下基础。
多层感知器
在本节中,我们定义了一个用于二进制分类的多层感知器模型。
该模型有10个输入,3个隐层分别有10、20和10个神经元,一个输出层只有一个输出。校正的线性激活函数用于每个隐藏层,sigmoid激活函数用于二进制分类的输出层。
#多层感知机
从keras.utils导入绘图_模型
可视输入(形状(10,)
hidden1Dense(10,activationrelu)(可见)
hidden2Dense(20,activationrelu)(hidden1)
hidden3Dense(10,activationrelu)(hidden2)
输出密集(1,activationsigmoid)(隐藏3)
模型模型(输入可见,输出输出)
#总结图层
打印(())
#绘图图表
plot_model(模型,至文件多层感知器_)
运行示例以显示网络的结构:
模型图的草图也被创建并保存到一个文件中。
多层感知器网络图
卷积神经网络
在本节中,我们将定义一个用于图像分类的卷积神经网络。
该模型接收规格为64×64的黑白图像作为输入,然后有一系列卷积层和池层作为特征提取器,接着是完全连通层来解释特征,还有一个sigmoid激活函数用于两类预测。
#卷积神经网络
从导入Conv2D
从导入MaxPooling2D
可视输入(shape(64,64,1))
conv1Conv2D(32,kernel_size4,activationrelu)(可见)
pool1MaxPooling2D(pool_size(2,2))(conv1)
conv2Conv2D(16,kernel_size4,activationrelu)(池1)
pool2MaxPooling2D(pool_size(2,2))(conv2)
hidden1Dense(10,activationrelu)(pool2)
输出密集(1,activationsigmoid)(hidden1)
plot_model(模型,to_卷积_neural_)
运行示例以总结模型层:
模型图的草图也被创建并保存到一个文件中。
卷积神经网络图
循环神经网络
在本节中,我们将定义一个用于序列分类的长短记忆循环神经网络。
该模型期望将要素的100个时间步长作为输入。该模型有一个用于从序列中提取特征的LSTM隐藏层,一个用于解释LSTM输出的全连接层,以及一个用于二元预测的输出层。
#递归神经网络
从LSTM进口
可视输入(shape(100,1))
隐藏1LSTM(10)(可见)
hidden2Dense(10,activationrelu)(hidden1)
输出密集(1,activationsigmoid)(隐藏2)
plot_model(model,to_filerecurrent_neural_)
运行示例来总结模型层。
循环神经网络图
多个层可以共享一个层的输出。
例如,同一输入可能有多个不同的特征提取层,或者使用多个层来解释一个特征提取层的输出。
让让我们看看这两个例子。
共享输入层
在本节中,我们定义了多个卷积层,这些卷积层具有不同大小的核来解释图像输入。
该模型使用大小为64×64像素的黑白图像。有两个CNN特征提取子模型共享该输入。第一个内核大小是4,第二个内核大小是8。这些特征提取子模型的输出被压缩成向量,连接到一个长向量,并且在最终输出层中的二进制分类之前被传递到一个完全连接的层用于解释。
#共享输入层
从导入展平
从导入连接
#输入层
#第一个特征提取r
flat1Flatten()(池1)
#第二特征提取器
conv2Conv2D(16,kernel_size8,activationrelu)(可见)
flat2Flatten()(池2)
#合并特征提取器
合并连接([平面1,平面2])
#解释层
hidden1Dense(10,activationrelu)(合并)
#预测输出
plot_model(model,to_fileshared_input_)
共享输入的神经网络图
共享特征提取层
在本节中,我们将使用两个平行的子模型来解释用于序列分类的LSTM特征提取器的输出。
模型的输入是一个特征的100个时间步。一个具有10个存储单元的LSTM层来解释该序列。第一种解释模型是浅层单一全连通层,第二种是深层三层模型。两个解释性模型的输出连接到一个长向量,并传递到输出层进行二进制预测。
#共享特征提取层
#定义输入
#特征提取
摘录1LSTM(10)(可见)
#第一个解释模型
interp1Dense(10,activationrelu)(extract1)
#第二种解释模式
interp11Dense(10,activationrelu)(extract1)
interp12密集(20,activationrelu)(interp11)
interp13Dense(10,activationrelu)(interp12)
#合并解释
合并连接([interp1,interp13])
#输出
输出密集(1,activationsigmoid)(合并)
plot_model(模型,到文件共享特征_)
共享特征提取层的神经网络图
功能aPI还可以用于开发具有多种输入的更复杂的模型,这些模型可能有不同的形式。它还可以用于开发产生多种输出的模型。
我们将在本节中查看每个示例。
多输入模型
我们将开发一个图像分类模型,它以两个版本的图像作为输入,每个版本的大小都不同。具体来说就是黑白64×64版本和彩色32×32版本。在每个模型上运行单独的特征提取CNN模型,然后将两个模型的结果连接起来进行解释和最终预测。
注意,在创建Model()实例时,我们将两个输入层定义为数组。详情如下:
模型模型(输入[可视1,可视2],输出输出)
一个完整的例子如下:
#多个输入
#第一个输入模型
visible1输入(shape(64,64,1))
conv11Conv2D(32,kernel_size4,activationrelu)(visible1)
pool11MaxPooling2D(pool_size(2,2))(conv11)
conv12Conv2D(16,kernel_size4,activationrelu)(池11)
pool12MaxPooling2D(pool_size(2,2))(conv12)
flat1Flatten()(池12)
#第二个输入模型
visible2输入(shape(32,32,3))
conv21Conv2D(32,kernel_size4,activationrelu)(visible2)
pool21MaxPooling2D(pool_size(2,2))(conv21)
conv22Conv2D(16,kernel_size4,activationrelu)(池21)
pool22MaxPooling2D(pool_size(2,2))(conv22)
flat2Flatten()(池22)
#合并输入模型
#解释模型
plot_model(model,to_filemultiple_)
模型图的草图被创建并保存到文件中。
多输入的神经网络图
多输出模型
在本节中,我们将开发一个可以执行两种不同类型的系统。预测模型。给定一个100时间步长的特征输入序列,模型将对该序列进行分类,并输出一个具有相同长度的新序列。
LSTM层解释输入序列并返回每个时间步长的隐藏状态。第一个输出模型创建堆栈LSTM,解释要素并进行二元预测。第二个输出模型使用相同的输出图层对每个输入时间步长进行实值预测。
#多个输出
从导入时间分布
提取LSTM(10,return_sequencesTrue)(可见)
#分类输出
第11课LSTM(10)(摘录)
第12类密集(10,activationrelu)(第11类)
output1Dense(1,activationsigmoid)(class12)
#序列输出
output2时间分布式(Dense(1,activationlinear))(提取)
模型模型(inputsvisible,outputs[output1,output2])
plot_model(model,to_filemultiple_)
多输出神经网络图
在这一节中,我将为您提供一些建议,以便在定义自己的模型时充分利用函数式API。
变量名一致:输入层(可见)、输出层(输出)甚至隐藏层(hidden1、hidden2)使用同一个变量名。这将有助于正确连接它们。
审查层总结:坚持总结归纳模型,审查层输出,以确保模型按预期连接。
审查图:不断创建模型图的图,并审查它,以确保所有的东西都按照您的意愿放在一起。
命名层:当查看模型图的概要和草图时,您可以为所使用的层指定名称。例如:Dense(1,名为hidden1)。
单独的子模型:考虑开发单独的子模型,最后将它们组合在一起。