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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章