整体流程大概是:定义好用到特征——搭建网络————编译模型——训练——预测结果
原始数据通常为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)
最后将所以特征放到数组里,作为神经网络的第一层。
该步主要生产能产生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)