集团站切换校区

验证码已发送,请查收短信

复制成功
微信号:togogoi
添加微信好友, 详细了解课程
已复制成功,如果自动跳转微信失败,请前往微信添加好友
打开微信
图标

业界新闻

当前位置:首页 > >业界新闻 > >

人工智能AI培训_TensorFlow 2.0 keras快速入门

发布时间: 2019-07-09 14:02:31

人工智能AI培训_TensorFlow 2.0 keras快速入门

AI培训

1. 导入tf.keras

tensorflow2推荐使用keras构建网络,常见的神经网络都包含在keras.layer(最新的tf.keras的版本可能和keras不同)

tf.k​eras Kera​s API TensorFlow 里的实现。这是一个高级API,用于构建和训练模型,同时兼容 TensorFlow 的绝大部分功能,比如,eager exec​ution tf.​data模块及 Esti​mators tf.ke​ras使得 TensorFlow 更容易使用,且保持 TF 的灵活性和性能。
首先需要在您的代码开始时导入tf.keras

import tensorflow as tf
#tensorflow2.0 使用keras一般通过tensorflow.keras来使用,但是pycharm没有提示,原因是因为实际的keras路径放在tensorflow/python/keras,但是在程序中tensorflow有没有python这个目录,解决方法如下
try:
    import tensorflow.keras as keras
except:
    import tensorflow.python.keras as keras
#这样pycharm既可以有提示,同时也不需要在程序运行的时候修改代码了。非常完美的解决手段,当然如果你不适用ide就不需要这些东西了。
print(tf.__version__)
print(keras.__version__)

tf.keras可以运行任何与Keras兼容的代码,但请记住:

        最新TensorFlow版本中的tf.keras版本可能与PyPI的最新keras版本不同。 检查tf.keras.version。

        保存模型的权重时,tf.keras默认为 checkp​oint 格式。 通过save_format ='h5'使用HDF5。

2. 构建简单模型

2.1. 模型堆叠

最常见的模型类型是层的堆叠:keras.Sequential 模型

Keras中,您可以组装图层来构建模型。 模型(通常)是图层图。 最常见的模型类型是一堆层:tf.keras.S​equential 模型。构建一个简单的全连接网络(即多层感知器):

# Dense函数参数
#     units: 正整数,输出空间维度。
#     activation: 激活函数 (详见 activations)。 若不指定,则不使用激活函数 (即,「线性」激活: a(x) = x)。
#     use_bias: 布尔值,该层是否使用偏置向量。
#     kernel_initializer: kernel 权值矩阵的初始化器 (详见 initializers)。
#     bias_initializer: 偏置向量的初始化器 (see initializers).
#     kernel_regularizer: 运用到 kernel 权值矩阵的正则化函数 (详见 regularizer)。
#     bias_regularizer: 运用到偏置向的的正则化函数 (详见 regularizer)。
#     activity_regularizer: 运用到层的输出的正则化函数 (它的 "activation")。 (详见 regularizer)。
#     kernel_constraint: 运用到 kernel 权值矩阵的约束函数 (详见 constraints)。
#     bias_constraint: 运用到偏置向量的约束函数 (详见 constraints)。

# Dropout参数解释:
#     inputs:必须,即输入数据。
#     rate:可选,默认为 0.5,即 dropout rate,如设置为 0.1,则意味着会丢弃 10% 的神经元。
#     noise_shape:可选,默认为 None,int32 类型的一维 Tensor,它代表了 dropout mask 的 shape,dropout mask 会与 inputs 相乘对 inputs 做转换,例如 inputs 的 shape 为 (batch_size, timesteps, features),但我们想要 droput - - mask 在所有 timesteps 都是相同的,我们可以设置 noise_shape=[batch_size, 1, features]。
#     seed:可选,默认为 None,即产生随机熟的种子值。
#     training:可选,默认为 False,布尔类型,即代表了是否标志位 training 模式。
#     name:可选,默认为 None,dropout 层的名称。

model = keras.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

2.2. 网络配置

tf.keras.layers中网络配置:

activation:设置层的激活函数。此参数由内置函数的名称指定,或指定为可调用对象。默认情况下,系统不会应用任何激活函数。

kernel_initializer bias_initializer:创建层权重(核和偏差)的初始化方案。此参数是一个名称或可调用对象,默认为 “Glorot uniform” 初始化器。

kernel_regularizer bias_regularizer:应用层权重(核和偏差)的正则化方案,例如 L1 L2 正则化。默认情况下,系统不会应用正则化函数。

keras.layers.Dense(32, activation='sigmoid')
keras.layers.Dense(32, activation=tf.sigmoid)
keras.layers.Dense(32, kernel_initializer='orthogonal')
keras.layers.Dense(32, kernel_initializer=tf.keras.initializers.glorot_normal)
keras.layers.Dense(32, kernel_regularizer=tf.keras.regularizers.l2(0.01))
keras.layers.Dense(32, kernel_regularizer=tf.keras.regularizers.l1(0.01))

3. 训练和评估

3.1. 设置训练流程

构建模型后,通过调用compile方法配置其训练过程:

# compile函数:在模型准备好进行培训之前,它需要更多设置。这些是在模型的编译步骤中添加的:
#
#     损失函数 - 这可以衡量模型在训练过程中的准确程度。我们希望最小化此功能,以便在正确的方向上“引导”模型。
#     优化器 - 这是基于它看到的数据及其损失函数更新模型的方式。
#     度量标准 - 用于监控培训和测试步骤。以下示例使用精度,即正确分类的图像的分数。

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

compile有三个重要参数:

· optimizer:训练过程的优化方法。此参数通过 tf.t​rain 模块的优化方法的实例来指定,比如:AdamOpt​imizer RMSPropOptim​izer GradientDescentOptimizer

· loss:训练过程中使用的损失函数(通过最小化损失函数来训练模型)。 常见的选择包括:均方误差(mse),categorical_crossentropy和binary_crossentropy。 损失函数由名称或通过从tf.keras.losses模块传递可调用对象来指定。

· metrics:训练过程中,监测的指标(Used to monitor training)。
指定方法:名称 可调用对象 from the tf.keras​.metrics 模块。
以下显示了配置培训模型的几个示例:

# Configure a model for mean-squared error regression.

model.compile(optimizer=tf.train.AdamOptimizer(0.01),

              loss='mse',       # mean squared error

              metrics=['mae'])  # mean absolute error

# Configure a model for categorical classification.

model.compile(optimizer=tf.train.RMSPropOptimizer(0.01),

              loss=keras.losses.categorical_crossentropy,

              metrics=[keras.metrics.categorical_accuracy])

3.2. compile函数

keras model.compile(loss='目标函数 ', optimize​r='adam', metrics=['accuracy'])

目标函数,或称损失函数,是网络中的性能函数,也是编译一个模型必须的两个参数之一。由于损失函数种类众多,下面以keras官网手册的为例。

在官方keras.io里面,有如下资料:

· mean_squared_error或mse

· mean_absolute_error或mae

· mean_absolute_percentage_error或mape

· mean_squared_logarithmic_error或msle

· squared_hinge

· hinge

· binary_crossentropy(亦称作对数损失,logloss)

· categorical_crossentropy:亦称作多类的对数损失,注意使用该目标函数时,需要将标签转化为形如(nb_samples, nb_classes)的二值序列

· sparse_categorical_crossentrop:如上,但接受稀疏标签。注意,使用该函数时仍然需要你的标签与输出值的维度相同,你可能需要在标签数据上增加一个维度:np.expand_dims(y,-1)

· kullback_leibler_divergence:从预测值概率分布Q到真值概率分布P的信息增益,用以度量两个分布的差异.

· cosine_proximity:即预测值与真实标签的余弦距离平均值的相反数

3.3. 评估与预测

tf.keras.Model.e​valuate  tf.keras.Model.predict 方法能够使用 NumPy 数据 和 tf.da​ta.Dataset 数据。要评估所提供数据的推理模式损失和指标,并且作为NumPy数组,预测所提供数据的推断中最后一层的输出:

#训练和评估模型:
model.fit(x_train, y_train, epochs=5)
test_loss, test_acc = model.evaluate(x_test,y_test)
print('Test accuracy:', test_acc)
predictions = model.predict(x_test)
print("==================")
print(predictions)

3.4. 完整代码

from __future__ import absolute_import, division, print_function, unicode_literals
import tensorflow as tf
#tensorflow2.0 使用keras一般通过tensorflow.keras来使用,但是pycharm没有提示,原因是因为实际的keras路径放在tensorflow/python/keras,但是在程序中tensorflow有没有python这个目录,解决方法如下
try:
    import tensorflow.keras as keras
except:
    import tensorflow.python.keras as keras
#加载并准备MNIST数据集,将样本从整数转换为浮点数
mnist = keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
#将数据归一化,在训练网络之前,必须对数据进行预处理。如果您检查训练集中的第一个图像,您将看到像素值落在0到255的范围内
# 在馈送到神经网络模型之前,我们将这些值缩放到0到1的范围。为此,将图像组件的数据类型从整数转换为float,并除以255.0。
x_train, x_test = x_train / 255.0, x_test / 255.0

#通过堆叠图层构建tf.keras.Sequential模型。选择用于训练的优化器和损失函数:
# 该网络中的第一层tf.keras.layers.Flatten将图像的格式从2d阵列(28乘28像素)转换为28 * 28 = 784像素的1d阵列。可以将此图层视为图像中未堆叠的像素行并将其排列。该层没有要学习的参数; 它只重新格式化数据。
# 在像素被展平之后,网络由tf.keras.layers.Dense两层序列组成。这些是密集连接或完全连接的神经层。第一Dense层有128个节点(或神经元)。第二(和最后)层是10节点softmax层 - 这返回10个概率分数的数组,其总和为1.每个节点包含指示当前图像属于10个类之一的概率的分数。

# Dense函数参数
#     units: 正整数,输出空间维度。
#     activation: 激活函数 (详见 activations)。 若不指定,则不使用激活函数 (即,「线性」激活: a(x) = x)。
#     use_bias: 布尔值,该层是否使用偏置向量。
#     kernel_initializer: kernel 权值矩阵的初始化器 (详见 initializers)。
#     bias_initializer: 偏置向量的初始化器 (see initializers).
#     kernel_regularizer: 运用到 kernel 权值矩阵的正则化函数 (详见 regularizer)。
#     bias_regularizer: 运用到偏置向的的正则化函数 (详见 regularizer)。
#     activity_regularizer: 运用到层的输出的正则化函数 (它的 "activation")。 (详见 regularizer)。
#     kernel_constraint: 运用到 kernel 权值矩阵的约束函数 (详见 constraints)。
#     bias_constraint: 运用到偏置向量的约束函数 (详见 constraints)。

# Dropout参数解释:
#     inputs:必须,即输入数据。
#     rate:可选,默认为 0.5,即 dropout rate,如设置为 0.1,则意味着会丢弃 10% 的神经元。
#     noise_shape:可选,默认为 None,int32 类型的一维 Tensor,它代表了 dropout mask 的 shape,dropout mask 会与 inputs 相乘对 inputs 做转换,例如 inputs 的 shape 为 (batch_size, timesteps, features),但我们想要 droput - - mask 在所有 timesteps 都是相同的,我们可以设置 noise_shape=[batch_size, 1, features]。
#     seed:可选,默认为 None,即产生随机熟的种子值。
#     training:可选,默认为 False,布尔类型,即代表了是否标志位 training 模式。
#     name:可选,默认为 None,dropout 层的名称。

model = keras.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

# compile函数:在模型准备好进行培训之前,它需要更多设置。这些是在模型的编译步骤中添加的:
#
#     损失函数 - 这可以衡量模型在训练过程中的准确程度。我们希望最小化此功能,以便在正确的方向上“引导”模型。
#     优化器 - 这是基于它看到的数据及其损失函数更新模型的方式。
#     度量标准 - 用于监控培训和测试步骤。以下示例使用精度,即正确分类的图像的分数。

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
#训练和评估模型:
model.fit(x_train, y_train, epochs=5)
test_loss, test_acc = model.evaluate(x_test,y_test)
print('Test accuracy:', test_acc)
predictions = model.predict(x_test)
print("==================")
print(predictions)

本实验利用网上已有的北京房价数据集预测了北京的房价,实现了TensorFlow的线性回归应用。

上一篇: Python培训_Python核心类型之元组

下一篇: 腾科华为培训课程之组播详解

在线咨询 ×

您好,请问有什么可以帮您?我们将竭诚提供最优质服务!