发布时间: 2019-07-09 14:02:31
tensorflow2推荐使用keras构建网络,常见的神经网络都包含在keras.layer中(最新的tf.keras的版本可能和keras不同)
tf.keras是 Keras API 在TensorFlow 里的实现。这是一个高级API,用于构建和训练模型,同时兼容 TensorFlow 的绝大部分功能,比如,eager execution, tf.data模块及 Estimators。 tf.keras使得 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默认为 checkpoint 格式。 通过save_format ='h5'使用HDF5。
最常见的模型类型是层的堆叠:keras.Sequential 模型
在Keras中,您可以组装图层来构建模型。 模型(通常)是图层图。 最常见的模型类型是一堆层:tf.keras.Sequential 模型。构建一个简单的全连接网络(即多层感知器):
# 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') ]) |
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)) |
构建模型后,通过调用compile方法配置其训练过程:
# compile函数:在模型准备好进行培训之前,它需要更多设置。这些是在模型的编译步骤中添加的: # # 损失函数 - 这可以衡量模型在训练过程中的准确程度。我们希望最小化此功能,以便在正确的方向上“引导”模型。 # 优化器 - 这是基于它看到的数据及其损失函数更新模型的方式。 # 度量标准 - 用于监控培训和测试步骤。以下示例使用精度,即正确分类的图像的分数。 model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) |
compile有三个重要参数:
· optimizer:训练过程的优化方法。此参数通过 tf.train 模块的优化方法的实例来指定,比如:AdamOptimizer, RMSPropOptimizer, 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])
keras model.compile(loss='目标函数 ', optimizer='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:即预测值与真实标签的余弦距离平均值的相反数
tf.keras.Model.evaluate 和 tf.keras.Model.predict 方法能够使用 NumPy 数据 和 tf.data.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) |
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的线性回归应用。
下一篇: 腾科华为培训课程之组播详解