小言_互联网的博客

tensorflow2.0基于keras构建深度学习分类模型 【tensorflow2.0教程 常用操作集合系列5】

739人阅读  评论(0)

【AI算法推荐】:tensorflow2.0建模教程系列

【导读】
在tensorflow2.0建模系列教程中,前四节我们用代码演绎了:
系列1:如何用tf2.0进行自定义层网络的设计(add.weight)
系列2:如何用tf2.0进行自定义模型的设计(Model)
系列3:如何用tf2.0实现loss函数和参数调优(loss gradient optimizer)
系列4:.如何用tf2.0实现损失函数正则化,解决模型过拟合问题

前面几章节,我们重点学习了如何用tensorflow2.0完成自定义层和网络模型的设计。从本节起,将带领大家掌握tf2.0更加方便的建模工具API——tensorflow.keras 。
Keras 是一个用于构建和训练深度学习模型的高阶 API。它可用于快速设计原型、高级研究和生产。相对于自定义设计层和网络,运用tf.keras 更加便捷,系统化,易于扩展。常见的LSTM/RNN/Conv2D等神经网络都包含在 keras.layer 中。

《一 基于keras的简单网络模型设计》
keras.sequential()层网络的堆叠,keras.Sequential模型

model = tf.keras.Sequential()
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
model.compile(optimizer=tf.keras.optimizers.Adam(0.001),
             loss=tf.keras.losses.sparse_categorical_crossentropy,
             metrics=[tf.keras.metrics.categorical_accuracy])

注解:
1.其中Sequential() 用于建立序列模型

2.Dense 层为全连接层,设定32个神经元。
3.activation设置层的激活函数,激活函数一般使用 relu。防止在参数调优计算过程中梯度消失。
4.最后一个全连接层是预测用的,激活函数使用 softmax,得到对各个类别预测的概率。
5.优化器选择 Adam 优化器.

《二 基于keras构建模型的高级函数API》
tf.keras.Sequential 模型是层的简单堆叠,我们还可以使用 Keras 函数式 API 构建复杂的模型:

model = tf.keras.Model(inputs=input_x, outputs=pred)

1首先定义输入张量,如果是图片数据28*28,可以使用layers.flatten(28,28)展开像素。
2.界定网络模型层级函数,每一层设计定义清楚后作为下一层调用的张量,起到函数迭代的作用。
3.最终结合输入张量和输出张量,确定出tf.keras.Model 实例。
4.训练方式和 Sequential 模型一样,model.fit()方法

input_x = tf.keras.Input(shape=(328,))
hidden1 = layers.Dense(32, activation='relu')(input_x)
hidden2 = layers.Dense(16, activation='relu')(hidden1)
pred = layers.Dense(10, activation='softmax')(hidden2)

model = tf.keras.Model(inputs=input_x, outputs=pred)
model.compile(optimizer=tf.keras.optimizers.Adam(0.001),
             loss=tf.keras.losses.categorical_crossentropy,
             metrics=['accuracy'])
model.fit(train_x, train_y, batch_size=32, epochs=5)

当然Keras还有一种定义model极为简洁的方式,代码示例如下:

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.3),
  tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])   
return model 

注解:
1.为了避免神经网络模型发生过拟合,我们在模型网络设计中加入了Dropout 层,并使用 0.3的失活率。
2.损失函数使用 sparse_categorical_crossentropy,还有一个损失函数是 categorical_crossentropy,两者的区别在于输入的真实标签的形式,sparse_categorical 输入的是整形的标签,例如 [1, 2, 3, 4],categorical 输入的是 one-hot 编码的标签。

如果你对AI算法感兴趣,欢迎关注我的博客《深度学习算法攻城狮》,持续更新AI深度学习算法项目实战代码,十分钟学会写出撩妹神器AI聊天机器人@~@


转载:https://blog.csdn.net/weixin_37479258/article/details/101030470
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场