tf.Keras (tf-1.15)使用记录1-基础模型创建的两种方法
tf.keras有两种神经网络的创建方法,分别是基于sequential的方式创建和基于functional的方式创建。其中基于functional的方式创建更为灵活,更容易自定义网络中的细节;基于sequential的方式创建则更加简单。
1)基于sequential方式处理pd数据示例:更简单
不需要定义和处理输入输出,以及内部的数据流。
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
import tensorflow as tf
# 生成数据并转化为pandas
X = np.random.randn(1000, 2)
Y = (X[:, 0] + X[:, 1] > 0).astype(int)
df = pd.DataFrame(X, columns=['feature1', 'feature2'])
df['target'] = Y
# 分割数据
X_train, X_test, y_train, y_test = train_test_split(df[['feature1', 'feature2']], df['target'], test_size=0.2, random_state=42)
# tf.keras模型定义
# 构建Sequential模型
model = tf.keras.Sequential([
tf.keras.layers.Dense(64, activation='relu', input_shape=(2,)),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(32, activation='relu'),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Dropout(0.3),
tf.keras.layers.Dense(1, activation='sigmoid')
])
# 编译模型
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# 训练模型
model.fit(X_train, y_train, epochs=10, batch_size=32, validation_split=0.1, verbose=1)
# 预测
preds = model.predict(X_test)
2)基于functional方式处理pd数据示例:更灵活
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
import tensorflow as tf
# 生成数据并转化为pandas
X = np.random.randn(1000, 2)
Y = (X[:, 0] + X[:, 1] > 0).astype(int)
df = pd.DataFrame(X, columns=['feature1', 'feature2'])
df['target'] = Y
# 分割数据
X_train, X_test, y_train, y_test = train_test_split(df[['feature1', 'feature2']], df['target'], test_size=0.2, random_state=42)
# tf.keras模型定义
# 构建Functional API模型
def get_my_model(input_dim):
inputs = tf.keras.Input(shape=(input_dim,))
x = tf.keras.layers.Dense(64, activation='relu')(inputs)
x = tf.keras.layers.BatchNormalization()(x)
x = tf.keras.layers.Dropout(0.3)(x)
x = tf.keras.layers.Dense(32, activation='relu')(x)
x = tf.keras.layers.BatchNormalization()(x)
x = tf.keras.layers.Dropout(0.3)(x)
outputs = tf.keras.layers.Dense(1, activation='sigmoid')(x)
model = tf.keras.Model(inputs=inputs, outputs=outputs)
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
return model
# 编译模型
model = get_my_model(2)
# 训练模型
model.fit(X_train, y_train, epochs=10, batch_size=32, validation_split=0.1, verbose=1)
# 预测
preds = model.predict(X_test)