Keras 搭建神经网络的简单pipeline

整体流程大概是:定义好用到特征——搭建网络————编译模型——训练——预测结果

原始数据通常为csv文件

特征定义

用tensorflow的feature_column函数完成对特征的转换,在这一步只是指明对将来喂入数据中的某个特征要做什么样的处理,这一步还没接触到真正的数据,相当于预定了一个处理框架。

from tensorflow import feature_column
数值特征

直接使用
对于数值特征,直接用numeric_column处理

age = feature_column.numeric_column("Age")

进行分桶
在上一步的基础上再进行处理

age_buckets = feature_column.bucketized_column(age, boundaries=[16, 32, 48, 64, 200])
字符串特征

对于字符串特征首先将其转化为类别

#categorical_column_with_vocabulary_list:sex的取值列表,将其转化为类别
sex = feature_column.categorical_column_with_vocabulary_list(
      'Sex', ['male', 'female'])
# categorical_column_with_identity: pclass有三种取值,将其转化为类别
pclass = feature_column.categorical_column_with_identity(
      'Pclass', 3)

再将其转化为one-hot 特征,用indicator_column函数

sex_one_hot = feature_column.indicator_column(sex)

最后将所以特征放到数组里,作为神经网络的第一层。

创建dataset

该步主要生产能产生batch数据的dataset。
对于train,需要生成(feature, label)的tuple数据“”

labels = dataframe.pop('Survived')
ds = tf.data.Dataset.from_tensor_slices((dict(dataframe), labels))

test直接生成即可

ds = tf.data.Dataset.from_tensor_slices(dict(dataframe)

最后进行batch化

模型搭建

model = tf.keras.Sequential([
        feature_layer,
        layers.Dense(cells_number, activation='relu'),
        layers.Dropout(dropout_rate),
        layers.Dense(1, activation='sigmoid')
    ])

Sequential将不同层连起来

编译模型

定义优化器,损失函数,以及metric(metric只是给人看的)

model.compile(optimizer=adam, loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
                  metrics=['accuracy'])

训练模型

fit函数中定义输入数据,验证集,以及其他参数

   model.fit(train_ds, 
              validation_data=val_ds,
              verbose=False,
              callbacks=[earlystop_callback],
              epochs=1000)
   earlystop_callback = EarlyStopping(
        monitor='val_accuracy', restore_best_weights=True,patience=200)

评估与预测

loss, accuracy = model.evaluate(val_ds)
predictions = model.predict(submit_ds)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章