Tensorflow常用API

tf.keras

tf.keras 是 tensorflow2 引入的高封装度的框架,可以用于快速搭建神经网络模型,keras 为支持快速实验而生,能够把想法迅速转换为结果,是深度学习框架之中最终易上手的一个,它提供了一致而简洁的 API,能够极大地减少一般应用下的工作量,提高代码地封装程度和复用性。
Keras 官方文档: https://tensorflow.google.cn/api_docs/python/tf

tf.keras 搭建神经网络六步法

1、import

import 相关模块,如 import tensorflow as tf。

import tensorflow as tf
from sklearn import datasets

2、get_dataset

指定输入网络的训练集和测试集,如指定训练集的输入 x_train 和标签y_train,测试集的输入 x_test 和标签 y_test。

def get_dataset(file_path):
    dataset = tf.data.experimental.make_csv_dataset(
        file_path,
        batch_size=12,
        label_name='label',
        na_value="0",
        num_epochs=1,
        ignore_errors=True)
    return dataset
train_dataset = get_dataset(training_samples_file_path)
test_dataset = get_dataset(test_samples_file_path)

模型构建

逐层搭建网络结构。model = tf.keras.models.Sequential()。
Sequential 函数是一个容器,描述了神经网络的网络结构,在 Sequential 函数的输入参数中描述从输入层到输出层的网络结构。

model = tf.keras.Sequential([
    tf.keras.layers.DenseFeatures(numerical_columns + categorical_columns),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(1, activation='sigmoid'),
])

常使用的tf.keras.layers:

tf.keras.layers.Dense():全连接层。参数个数 = 输入层特征数× 输出层特征数(weight)+ 输出层特征数(bias)。Dense实现了以下操作:输出=激活函数(wx+b),其中,w是由层创建的权重矩阵,b是由层生成的偏置向量。

tf.keras.layers.Activation():激活函数层。一般放在Dense层后面,等价于在Dense层中指定activation。

tf.keras.layers.Dropout():随机置零层。训练期间以一定几率将输入置0,一种正则化手段。

tf.keras.layers.BatchNormalization():批标准化层。通过线性变换将输入批次缩放平移到稳定的均值和标准差。可以增强模型对输入不同分布的适应性,加快模型训练速度,有轻微正则化效果。一般在激活函数之前使用。

tf.keras.layers.SpatialDropout2D():空间随机置零层。训练期间以一定几率将整个特征图置0,一种正则化手段,有利于避免特征图之间过高的相关性。

tf.keras.layers.Input():输入层。通常使用Functional API方式构建模型时作为第一层。

tf.keras.layers.DenseFeature():特征列接入层,用于接收一个特征列列表并产生一个密集连接层,即将列表中的特征连接在一起形成稠密特征向量。

tf.keras.layers.Flatten():压平层,用于将多维张量压成一维。

tf.keras.layers.Reshape():形状重塑层,改变输入张量的形状。

tf.keras.layers.Concatenate():拼接层,将多个张量在某个维度上拼接。

tf.keras.layers.Add():加法层。

tf.keras.layers.Subtract():减法层。

tf.keras.layers.Maximum():取最大值层。

tf.keras.layers.Minimum():取最小值层。

常使用的tf.feature_column

字符串型特征:
tf.feature_column.categorical_column_with_vocabulary_list (key, vocabulary_list):把字符串型的特征转换成 One-hot 特征。需要注意的是,该方法需要提前构建字典vocabulary_list,vocabulary_list包含了所有的特征。例子如下:

genre_vocab = ['Film-Noir', 'Action', 'Adventure', 'Horror', 'Romance', 'War', 'Comedy', 'Western', 'Documentary','Sci-Fi', 'Drama', 'Thriller','Crime', 'Fantasy', 'Animation', 'IMAX', 'Mystery', 'Children', 'Musical']
cat_col = tf.feature_column.categorical_column_with_vocabulary_list(key=feature, vocabulary_list=vocab)
emb_col = tf.feature_column.embedding_column(cat_col, 10)

tf.feature_column.embedding_column(cat_col, 10):当您的输入是稀疏的,但您希望将其转换为密集表示时,请使用此选项。

数字型特征:

tf.feature_column.numeric_column(column):处理数字型特征。

numerical_columns = [tf.feature_column.numeric_column('releaseYear'),
                     tf.feature_column.numeric_column('movieRatingCount'),
                     tf.feature_column.numeric_column('movieAvgRating'),
                     tf.feature_column.numeric_column('movieRatingStddev'),
                     tf.feature_column.numeric_column('userRatingCount'),
                     tf.feature_column.numeric_column('userAvgRating'),
                     tf.feature_column.numeric_column('userRatingStddev')]

tf.feature_column.categorical_column_with_identity(key, num_buckets):方法把 ID 转换成 One-hot 特征。

user_col = tf.feature_column.categorical_column_with_identity(key='userId', num_buckets=30001)
user_emb_col = tf.feature_column.embedding_column(user_col, 10)

modle.compile

在 model.compile()中配置训练方法,选择训练时使用的优化器、损失函数和最终评价指标。

# Model.compile( optimizer = 优化器, loss = 损失函数, metrics = [“准确率”]) 
model.compile(
    loss='binary_crossentropy',
    optimizer='adam',
    metrics=['accuracy', tf.keras.metrics.AUC(curve='ROC'), tf.keras.metrics.AUC(curve='PR')])

model.fit

在 model.fit()中执行训练过程,告知训练集和测试集的输入值和标签、每个 batch 的大小(batchsize)和数据集的迭代次数(epoch)。

model.fit(训练集的输入特征, 训练集的标签, batch_size, epochs, 
 validation_data = (测试集的输入特征,测试集的标签), 
 validataion_split = 从测试集划分多少比例给训练集, 
 validation_freq = 测试的 epoch 间隔次数) 

model.evaluate

评估模型

test_loss, test_accuracy, test_roc_auc, test_pr_auc = model.evaluate(test_dataset)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值