python - 如何从张量流中的多输入模型获得回归输出?
问题描述
这是我建立的模型,代码:
#---IMPORT DEPENDENCEIS-------------------------------------------------------+
import pandas as pd
import numpy as np
import random
import seaborn as sns
import matplotlib.pyplot as plt
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.callbacks import EarlyStopping
from tensorflow.keras.utils import plot_model
#---DATA----------------------------------------------------------------------+
D_tr = pd.read_csv('Training Data.csv') # training data set
D_te = pd.read_csv('Test Data.csv') # test data set
#---PREPROCESSING-------------------------------------------------------------+
# numerical inputs
def form_num(column,DF):
df = DF[column].copy()
df -= df.min()
df /= df.max()
return df
a_1 = form_num('income',D_tr)
a_2 = form_num('age',D_tr)
a_3 = form_num('experience',D_tr)
a_4 = form_num('current_job_years',D_tr)
a_5 = form_num('current_house_years',D_tr)
# categorical inputs
def form_cat(column,DF):
df = DF[column].copy()
df = pd.get_dummies(df)
return df
a_6 = form_cat('married',D_tr)
a_7 = form_cat('house_ownership',D_tr)
a_7 = form_cat('car_ownership',D_tr)
a_8 = form_cat('profession',D_tr)
a_9 = form_cat('city',D_tr)
a_10 = form_cat('state',D_tr)
# targets
t = D_tr['risk_flag'].copy()
#---MODEL---------------------------------------------------------------------+
# branch data
branch_1_data = pd.concat((a_1,a_3,a_4,a_7),axis = 1)
branch_2_data = pd.concat((a_6,a_8,a_10),axis = 1)
branch_3_data = pd.concat((a_1,a_5,a_9,a_10),axis = 1)
# branch_1 map
branch_1_input = keras.Input(shape = (branch_1_data.shape[1],),name = 'branch_1_input')
branch_1_layer = layers.Dense(10,activation = 'relu')(branch_1_input)
branch_1_output = layers.Dense(1,activation = 'relu')(branch_1_layer)
# branch_2 map
branch_2_input = keras.Input(shape = (branch_2_data.shape[1],),name = 'branch_2_input')
branch_2_layer = layers.Dense(10,activation = 'relu')(branch_2_input)
branch_2_output = layers.Dense(1,activation = 'relu')(branch_2_layer)
# branch_3 map
branch_3_input = keras.Input(shape = (branch_3_data.shape[1],),name = 'branch_3_input')
branch_3_layer = layers.Dense(10,activation = 'relu')(branch_3_input)
branch_3_output = layers.Dense(1,activation = 'relu')(branch_3_layer)
# stem join
stem = layers.concatenate([branch_1_output,branch_2_output,branch_3_output])
# trunk map
trunk_1 = layers.Dense(10,activation = 'relu')(stem)
trunk_2 = layers.Dense(5,activation = 'relu')(trunk_1)
trunk_output = layers.Dense(1)(trunk_2)
# Distributed Attribute Learning Deep Neural Network
DAL_DNN = keras.Model(inputs = [branch_1_input,
branch_2_input,
branch_3_input],
outputs = trunk_output)
DAL_DNN.compile(
optimizer = tf.keras.optimizers.Adam(
learning_rate=0.001,
beta_1=0.9,beta_2=0.999,
epsilon=1e-07,
amsgrad=False,
name="Adam"),
loss = 'mse'
)
callback = EarlyStopping(monitor = 'loss',patience = 3)
history = DAL_DNN.fit(
x = {'branch_1_input':branch_1_data,
'branch_2_input':branch_2_data,
'branch_3_input':branch_3_data},
y = t,
epochs = 1,
batch_size = 20,
validation_split = 0.2,
callbacks = [callback],
verbose = 1)
i = [[{'branch_1_input':branch_1_data.iloc[0],
'branch_2_input':branch_2_data.iloc[0],
'branch_3_input':branch_3_data.iloc[0]}],
[{'branch_1_input':branch_1_data.iloc[0],
'branch_2_input':branch_2_data.iloc[0],
'branch_3_input':branch_3_data.iloc[0]}]]
j = [
[
branch_1_data.iloc[0].to_numpy(),
branch_2_data.iloc[0].to_numpy(),
branch_3_data.iloc[0].to_numpy()
],
[
branch_1_data.iloc[0].to_numpy(),
branch_2_data.iloc[0].to_numpy(),
branch_3_data.iloc[0].to_numpy()
]
]
代码的最后一部分有两个输入i
,j
我想将它们提供给网络,我希望得到一个回归输出,但首先这是一个多输入模型,所以我不知道如何格式化要提供给的输入model.predict()
,并且对于两者i
以及j
何时model.predict()
抛出错误:
ValueError: Data cardinality is ambiguous:
x sizes: 5, 82, 348, 5, 82, 348
Make sure all arrays contain the same number of samples.
如何获得回归输出model.predict()
?
解决方案
推荐阅读
- elasticsearch - 搜索请求的 Elasticsearch 原子性保证
- python - 通过命令循环发送图像?
- opengl-es - 检查是否启用了 GLSL 扩展?
- javascript - jQuery/JS 中的动态多维数组
- arrays - 如何将图像数组映射为每个列表项 React JS 的两个图像
- python - Pyspark 行对象平面图
- java - 使用 stream() 和 sorted() 或使用 Collections 方法来反转列表顺序是否更快
- javascript - javascript 错误记录器正在传递一个我想记录详细信息的重试函数
- java - Java socket.io 等待回调
- javascript - 汇总:未捕获的 ReferenceError:未定义 async_hooks