整體流程大概是:定義好用到特徵——搭建網絡————編譯模型——訓練——預測結果
原始數據通常爲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)