东方耀AI技术分享
标题:
06、Keras如何实现多输入和多输出_代码示例
[打印本页]
作者:
东方耀
时间:
2019-10-30 11:29
标题:
06、Keras如何实现多输入和多输出_代码示例
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]))
复制代码
作者:
卿卿卿姐姐
时间:
2020-3-4 22:50
学习学习,正好有一个项目要做
欢迎光临 东方耀AI技术分享 (http://www.ai111.vip/)
Powered by Discuz! X3.4