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:
importtensorflowastf#tensorflow2.0 使用keras一般通过tensorflow.keras来使用,但是pycharm没有提示,原因是因为实际的keras路径放在tensorflow/python/keras,但是在程序中tensorflow有没有python这个目录,解决方法如下try:importtensorflow.kerasaskerasexcept:importtensorflow.python.kerasaskeras#这样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 thetf.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__importabsolute_import,division,print_function,unicode_literalsimporttensorflowastf#tensorflow2.0 使用keras一般通过tensorflow.keras来使用,但是pycharm没有提示,原因是因为实际的keras路径放在tensorflow/python/keras,但是在程序中tensorflow有没有python这个目录,解决方法如下try:importtensorflow.kerasaskerasexcept:importtensorflow.python.kerasaskeras#加载并准备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的线性回归应用。