|
06、Keras如何实现多输入和多输出_代码示例
Wide与Deep模型实战
子类API
功能API(函数式API)
多输入与多输出
东方老师AI官网:http://www.ai111.vip
有任何问题可联系东方老师微信:dfy_88888
【微信二维码图片】
多输出:主要针对多任务学习模型(分类与回归都需要预测输出)
Multi-Input实现Demo:
- import numpy as np
- import matplotlib as mpl
- import matplotlib.pyplot as plt
- import sklearn
- import pandas as pd
- import os
- import sys
- import time
- import tensorflow as tf
- from tensorflow import keras
- print(sys.version_info)
- for module in mpl, np, pd, sklearn, tf, keras:
- 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)
- 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)
- 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)
- def create_model_function_multi_input():
- # 第一种方法:函数式api实现wide&deep模型 像使用函数一样
- print('共%d个特征,前5个特征给wide模型,后6个特征给deep模型' % x_train.shape[1])
- input_wide = keras.layers.Input(shape=(5, ))
- input_deep = keras.layers.Input(shape=(6, ))
- # 复合函数的形式
- hidden_1 = keras.layers.Dense(30, activation='relu')(input_deep)
- hidden_2 = keras.layers.Dense(30, activation='relu')(hidden_1)
- # wide model
- concat = keras.layers.concatenate(inputs=[input_wide, hidden_2])
- output = keras.layers.Dense(1)(concat)
- model = keras.models.Model(inputs=[input_wide, input_deep], outputs=[output], name='wide_deep_model')
- return model
- model = create_model_function_multi_input()
- model.summary()
- model.compile(optimizer=keras.optimizers.Adam(0.001), loss='mean_squared_error')
- callbacks = [
- keras.callbacks.EarlyStopping(patience=5, min_delta=1e-2)
- ]
- # multi_input a list of arrays (in case the model has multiple inputs
- inputs_train = [x_train_scaled[:, :5], x_train_scaled[:, -6:]]
- inputs_valid = [x_valid_scaled[:, :5], x_valid_scaled[:, -6:]]
- history = model.fit(inputs_train, y_train, validation_data=(inputs_valid, y_valid), epochs=50,
- callbacks=callbacks)
- print(type(history))
- print(history.history)
- def plot_learning_curve(history):
- # ValueError: arrays must all be same length
- # 表格型数据 要求每一列的len一致 这里即:history.history字典里每个key对应的value长度一致
- df_history = pd.DataFrame(data=history.history)
- print(df_history)
- print(df_history.index)
- print(df_history.columns)
- print(df_history.dtypes)
- df_history.plot(figsize=(8, 5))
- plt.grid(True)
- # x就是DataFrame的索引
- plt.ylim(0, 1)
- plt.show()
- plot_learning_curve(history)
- # Returns the loss value & metrics values for the model in test mode.
- inputs_test = [x_test_scaled[:, :5], x_test_scaled[:, -6:]]
- print(model.evaluate(inputs_test, y_test))
复制代码
Multi-Output实现Demo:
- import numpy as np
- import matplotlib as mpl
- import matplotlib.pyplot as plt
- import sklearn
- import pandas as pd
- import os
- import sys
- import time
- import tensorflow as tf
- from tensorflow import keras
- print(sys.version_info)
- for module in mpl, np, pd, sklearn, tf, keras:
- 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)
- 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)
- 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)
- def create_model_function_multi_input_output():
- # 第一种方法:函数式api实现wide&deep模型 像使用函数一样
- print('共%d个特征,前5个特征给wide模型,后6个特征给deep模型' % x_train.shape[1])
- input_wide = keras.layers.Input(shape=(5, ))
- input_deep = keras.layers.Input(shape=(6, ))
- # 复合函数的形式
- hidden_1 = keras.layers.Dense(30, activation='relu')(input_deep)
- hidden_2 = keras.layers.Dense(30, activation='relu')(hidden_1)
- # wide model
- concat = keras.layers.concatenate(inputs=[input_wide, hidden_2])
- output = keras.layers.Dense(1)(concat)
- output2 = keras.layers.Dense(1)(hidden_2)
- model = keras.models.Model(inputs=[input_wide, input_deep], outputs=[output, output2], name='wide_deep_model')
- return model
- model = create_model_function_multi_input_output()
- model.summary()
- model.compile(optimizer=keras.optimizers.Adam(0.001), loss='mean_squared_error')
- callbacks = [
- keras.callbacks.EarlyStopping(patience=5, min_delta=1e-2)
- ]
- # multi_input a list of arrays (in case the model has multiple inputs
- inputs_train = [x_train_scaled[:, :5], x_train_scaled[:, -6:]]
- inputs_valid = [x_valid_scaled[:, :5], x_valid_scaled[:, -6:]]
- history = model.fit(inputs_train, [y_train, y_train], validation_data=(inputs_valid, [y_valid, y_valid]), epochs=50,
- callbacks=callbacks)
- print(type(history))
- print(history.history)
- print(history.history.keys())
- def plot_learning_curve(history):
- # ValueError: arrays must all be same length
- # 表格型数据 要求每一列的len一致 这里即:history.history字典里每个key对应的value长度一致
- df_history = pd.DataFrame(data=history.history)
- print(df_history)
- print(df_history.index)
- print(df_history.columns)
- print(df_history.dtypes)
- df_history.plot(figsize=(8, 5))
- plt.grid(True)
- # x就是DataFrame的索引
- plt.ylim(0, 1)
- plt.show()
- plot_learning_curve(history)
- # Returns the loss value & metrics values for the model in test mode.
- inputs_test = [x_test_scaled[:, :5], x_test_scaled[:, -6:]]
- print(model.evaluate(inputs_test, [y_test, y_test]))
复制代码
|
|