模型结构
函数式
关键代码
input = tf.keras.layers.Input(shape=x_train.shape[1:])
hidden1 = tf.keras.layers.Dense(30, activation='relu')(input)
hidden2 = tf.keras.layers.Dense(30, activation='relu')(hidden1)
concat = tf.keras.layers.concatenate([input, hidden2])
output = tf.keras.layers.Dense(1)(concat)
model = tf.keras.models.Model(inputs=[input],
outputs=[output])
print(model.layers)
model.summary()
完整代码
import pprint
import sys
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import sklearn
import tensorflow as tf
from tensorflow import keras
print(tf.__version__)
print(sys.version_info)
for module in mpl, np, pd, sklearn, keras, tf:
print(module.__name__, module.__version__)
from sklearn.datasets import fetch_california_housing
housing = fetch_california_housing()
print(housing.DESCR)
print(housing.data.shape)
print(housing.target.shape)
pprint.pprint(housing.data[:5])
pprint.pprint(housing.target[:5])
from sklearn.model_selection import train_test_split
x_train_all, x_test, y_train_all, y_test = train_test_split(housing.data,
housing.target,
random_state=7,
test_size=0.20)
x_train, x_valid, y_train, y_valid = train_test_split(
x_train_all, y_train_all, random_state=11, test_size=0.20)
print(x_train.shape, y_train.shape)
print(x_valid.shape, y_valid.shape)
print(x_test.shape, y_test.shape)
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
x_train_scaled = scaler.fit_transform(x_train)
x_valid_scaled = scaler.transform(x_valid)
x_test_scaled = scaler.transform(x_test)
input = tf.keras.layers.Input(shape=x_train.shape[1:])
hidden1 = tf.keras.layers.Dense(30, activation='relu')(input)
hidden2 = tf.keras.layers.Dense(30, activation='relu')(hidden1)
concat = tf.keras.layers.concatenate([input, hidden2])
output = tf.keras.layers.Dense(1)(concat)
model = tf.keras.models.Model(inputs=[input],
outputs=[output])
print(model.layers)
model.summary()
model.compile(loss='mean_squared_error',
optimizer='adam')
callbacks = [tf.keras.callbacks.EarlyStopping(patience=5, min_delta=1e-3)]
history = model.fit(x_train_scaled, y_train,
validation_data=(x_valid_scaled, y_valid),
epochs=10,
callbacks=callbacks)
def plot_learning_curves(hst):
pd.DataFrame(hst.history).plot()
plt.grid(True)
plt.gca().set_ylim(0, 1)
plt.show()
plot_learning_curves(history)
model.evaluate(x_test_scaled, y_test)
子类式
关键代码
class WideDeepModel(tf.keras.models.Model):
def __init__(self):
super(WideDeepModel, self).__init__()
self.hidden1_layer = tf.keras.layers.Dense(30, activation='relu')
self.hidden2_layer = tf.keras.layers.Dense(30, activation='relu')
self.output_layer = tf.keras.layers.Dense(1)
def call(self, inputs, training=None, mask=None):
"""完成模型的正向计算"""
hidden1 = self.hidden1_layer(inputs)
hidden2 = self.hidden2_layer(hidden1)
concat = tf.keras.layers.concatenate([inputs, hidden2])
output = self.output_layer(concat)
return output
model = WideDeepModel()
model.build(input_shape=(None, 8))
print(model.layers)
model.summary()
完整代码
import pprint
import sys
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import sklearn
import tensorflow as tf
from tensorflow import keras
print(tf.__version__)
print(sys.version_info)
for module in mpl, np, pd, sklearn, keras, tf:
print(module.__name__, module.__version__)
from sklearn.datasets import fetch_california_housing
housing = fetch_california_housing()
print(housing.DESCR)
print(housing.data.shape)
print(housing.target.shape)
pprint.pprint(housing.data[:5])
pprint.pprint(housing.target[:5])
from sklearn.model_selection import train_test_split
x_train_all, x_test, y_train_all, y_test = train_test_split(housing.data,
housing.target,
random_state=7,
test_size=0.20)
x_train, x_valid, y_train, y_valid = train_test_split(
x_train_all, y_train_all, random_state=11, test_size=0.20)
print(x_train.shape, y_train.shape)
print(x_valid.shape, y_valid.shape)
print(x_test.shape, y_test.shape)
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
x_train_scaled = scaler.fit_transform(x_train)
x_valid_scaled = scaler.transform(x_valid)
x_test_scaled = scaler.transform(x_test)
class WideDeepModel(tf.keras.models.Model):
def __init__(self):
super(WideDeepModel, self).__init__()
self.hidden1_layer = tf.keras.layers.Dense(30, activation='relu')
self.hidden2_layer = tf.keras.layers.Dense(30, activation='relu')
self.output_layer = tf.keras.layers.Dense(1)
def call(self, inputs, training=None, mask=None):
"""完成模型的正向计算"""
hidden1 = self.hidden1_layer(inputs)
hidden2 = self.hidden2_layer(hidden1)
concat = tf.keras.layers.concatenate([inputs, hidden2])
output = self.output_layer(concat)
return output
model = WideDeepModel()
model.build(input_shape=(None, 8))
print(model.layers)
model.summary()
model.compile(loss='mean_squared_error',
optimizer='adam')
callbacks = [tf.keras.callbacks.EarlyStopping(patience=5, min_delta=1e-3)]
history = model.fit(x_train_scaled, y_train,
validation_data=(x_valid_scaled, y_valid),
epochs=10,
callbacks=callbacks)
def plot_learning_curves(hst):
pd.DataFrame(hst.history).plot()
plt.grid(True)
plt.gca().set_ylim(0, 1)
plt.show()
plot_learning_curves(history)
model.evaluate(x_test_scaled, y_test)