Keras学习基础(2)

目录:

  1. Keras的模块结构
    • 数据预处理
    • 模型
    • 网络层
    • 网络配置
  2. Keras中的数据处理
    • 文本预处理
    • 序列预处理
    • 图像预处理
  3. Keras中的模型
    • Sequential顺序模型
    • 函数式模型
  4. Keras中的Layers网络层
    • 核心层
    • 卷积层
    • 池化层
    • 循环层
    • 嵌入层
    • 合并层
  5. Keras中的网络配置
    • 激活函数
    • 初始化
    • 正则化

一、Keras的模块结构

采用keras搭建一个神经网络:

三、keras的模型:

Keras中包含了两种定义模型的方法:Sequential模型和Functional模型。

Sequential模型是多个网络层的线性堆叠,而Functional模型则使得用户可以定义多输出模型、非循环有向模型或具有共享层的模型等复杂模型。
Functional模型具有很高的灵活性,而Sequential模型可以看做其一个特例。

Sequential模型:

这种模型各层之间是依次顺序的线性关系,在第k层和第k+1层之间可以加上各种元素来构造神经网络。这些元素可以通过一个列表来指定,然后作为参数传递给序列模型来生成相应的模型。如以下代码:

from Keras.models import Sequential
from Keras.layers import Dense,Activation
layers = [ Dense ( 32 , input_shape = (784,)) , 
               Activation('relu'),
               Dense(10),
               Activation('softmax') ]

model = Sequential(layers)

除了一开始直接在一个列表中指定所有元素外,也可以像下面这个例子一样逐层添加:

from Keras.models import Sequential
from Keras.layers import Dense , Activation

model = Sequential()

model.add(Dense(32,input_shape = (784,)))

model.add(Activation('relu')

model.add(Dense(10))

model.add(Activation('softmax')

Functional模型

Functional模型可以用来设计非常复杂、任意拓扑结构的神经网络,例如有向无环网络、共享层网络等。类似于序列模型,Function模型通过函数化的应用接口来定义模型。使用函数化的应用接口有多个好处,比如:决定函数执行结果的唯一要素是其返回值,而决定返回值的唯一要素则是其参数,减轻了代码测试的工作量。

案例1----全连接神经网络拟合MNIST的分类模型,输入数据是28*28的图像、

from keras.layers import Input, Dense
from keras.models import Model

# 定义输入层input,每一个图像拉成784个像素点的向量
inputs = Input(shape=(784,))

#定义各个连接层,包括激活函数,假设从输入层开始,定义两个隐含层,都有64个神经元
x = Dense(64, activation='relu')(inputs)
x = Dense(64, activation='relu')(x)

#定义输出层
y = Dense(10, activation='softmax')(x)

#定义模型对象
model = Model(input=inputs, output=y)

#编译,对数据进行拟合
model.compile(optimizer='rmsprop',
              loss='categorical_crossentropy',
              metrics=['accuracy'])
model.fit(data, labels)  # starts 

 案例2----双输入、双输出:LSTM时序预测

输入: 
新闻语料;新闻语料对应的时间 
输出: 
新闻语料的预测模型;新闻语料+对应时间的预测模型 

代码:

from keras.layers import Input, Embedding, LSTM, Dense
from keras.models import Model

# 标题输入:接收一个含有 100 个整数的序列,每个整数在 1 到 10000 之间。
# 注意我们可以通过传递一个 `name` 参数来命名任何层。
main_input = Input(shape=(100,), dtype='int32', name='main_input')

# Embedding 层将输入序列编码为一个稠密向量的序列,每个向量维度为 512。
x = Embedding(output_dim=512, input_dim=10000, input_length=100)(main_input)

# LSTM 层把向量序列转换成单个向量,它包含整个序列的上下文信息
lstm_out = LSTM(32)(x)

auxiliary_output = Dense(1, activation='sigmoid', name='aux_output')(lstm_out)

auxiliary_input = Input(shape=(5,), name='aux_input')
x = keras.layers.concatenate([lstm_out, auxiliary_input])

# 堆叠多个全连接网络层
x = Dense(64, activation='relu')(x)
x = Dense(64, activation='relu')(x)
x = Dense(64, activation='relu')(x)

# 最后添加主要的逻辑回归层
main_output = Dense(1, activation='sigmoid', name='main_output')(x)

#定义一个具有双输入和双输出的模型
model = Model(inputs=[main_input, auxiliary_input], outputs=[main_output, auxiliary_output])

#编译模型,给辅助损失分配一个 0.2 的权重
model.compile(optimizer='rmsprop', loss='binary_crossentropy',
              loss_weights=[1., 0.2])

model.fit([headline_data, additional_data], [labels, labels],
          epochs=50, batch_size=32

函数式模型 的另一个用途是使用共享网络层的模型。

案例3-----共享层

 Sequential模型和Functional模型主要差异在于如何定义从输入层到输出层的各层结构。

  •  Sequential模型是先定义序列模型对象,而Functional模型先定义输入层到输出层各层要素的,包括尺寸结构。
  • Sequential模型可通过add对模型对象依次添加各层信息,Functional模型通过不停地封装含有各层网络结构的函数作为参数来定义网络结构的。
  • Sequential模型各层只能依次线性添加,而Functional模型可在原有的网络结构上应用新的结构来快速生成新的模型

 两个模型有很多共同的方法和属性:

https://keras.io/zh/models/about-keras-models/

 

猜你喜欢

转载自www.cnblogs.com/Lee-yl/p/10121967.html