tensorflow2 函数api多输入多输出

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)

猜你喜欢

转载自blog.csdn.net/qq_38574975/article/details/108240448