from tensorflow import keras
# load dataset
from sklearn.datasets import fetch_california_housing
housing = fetch_california_housing()
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)
x_train, x_valid, y_train, y_valid = train_test_split(x_train_all, y_train_all, random_state=11)
from sklearn.preprocessing import StandardScaler
# normalization
scaler = StandardScaler()
x_train_scaled = scaler.fit_transform(x_train)
x_valid_scaled = scaler.transform(x_valid)
x_test_scaled = scaler.transform(x_test)
# core
input_wide = keras.layers.Input(shape=[5])
input_deep = keras.layers.Input(shape=[6])
hidden1 = keras.layers.Dense(30, activation='relu')(input_deep)
hidden2 = keras.layers.Dense(30, activation='relu')(hidden1)
concat = keras.layers.concatenate([input_wide, hidden2])
output = keras.layers.Dense(1)(concat)
output2 = keras.layers.Dense(1)(hidden2)
model = keras.models.Model(inputs=[input_wide, input_deep],
outputs=[output, output2])
x_train_scaled_wide = x_train_scaled[:, :5]
x_train_scaled_deep = x_train_scaled[:, 2:]
x_valid_scaled_wide = x_valid_scaled[:, :5]
x_valid_scaled_deep = x_valid_scaled[:, 2:]
x_test_scaled_wide = x_test_scaled[:, :5]
x_test_scaled_deep = x_test_scaled[:, 2:]
model.compile(optimizer='adam', loss=keras.losses.mse)
history = model.fit([x_train_scaled_wide, x_train_scaled_deep],
[y_train, y_train],
validation_data=(
[x_valid_scaled_wide, x_valid_scaled_deep],
[y_valid, y_valid]),
epochs=100)
############################subclass实现##########################
class WideAndDeep(keras.models.Model):
def __init__(self):
super(WideAndDeep, self).__init__()
self.hide1_layer = keras.layers.Dense(30, activation='relu')
self.hide2_layer = keras.layers.Dense(30, activation='relu')
self.output_layer = keras.layers.Dense(1)
def call(self, input):
print(type(input),input)
a,b=input
hide1 = self.hide1_layer(a)
hide2 = self.hide2_layer(hide1)
concat = keras.layers.concatenate([b, hide2])
##这两个输出的输入的shape一定要一样,否则报错
output = self.output_layer(concat)
output1=self.output_layer(concat)
return (output,output1)
model = WideAndDeep()
#model.summary()
model.compile(optimizer='adam', loss=keras.losses.mse)
model.fit([x_train_scaled_wide, x_train_scaled_deep],[y_train,y_train],validation_data=([x_valid_scaled_wide, x_valid_scaled_deep], [y_valid,y_valid]),epochs=1)
tensorflow2 函数api多输入多输出
猜你喜欢
转载自blog.csdn.net/qq_38574975/article/details/108240448
今日推荐
周排行