KerasRegressor 和多输出问题

qua*_*rkz 6 python deep-learning keras

我有 3 个输入和 3 个输出。我正在尝试使用 KerasRegressor 和 cross_val_score 来获得我的预测分数。

我的代码是:

# Function to create model, required for KerasClassifier
def create_model():

    # create model
    # #Start defining the input tensor:
    input_data = layers.Input(shape=(3,))

    #create the layers and pass them the input tensor to get the output tensor:
    layer = [2,2]
    hidden1Out = Dense(units=layer[0], activation='relu')(input_data)
    finalOut = Dense(units=layer[1], activation='relu')(hidden1Out)

    u_out = Dense(1, activation='linear', name='u')(finalOut)   
    v_out = Dense(1, activation='linear', name='v')(finalOut)   
    p_out = Dense(1, activation='linear', name='p')(finalOut)   

    #define the model's start and end points
    model = Model(input_data,outputs = [u_out, v_out, p_out])    

    model.compile(loss='mean_squared_error', optimizer='adam')

    return model

#load data
...

input_var = np.vstack((AOA, x, y)).T
output_var = np.vstack((u,v,p)).T

# evaluate model
estimator = KerasRegressor(build_fn=create_model, epochs=num_epochs, batch_size=batch_size, verbose=0)
kfold = KFold(n_splits=10)
Run Code Online (Sandbox Code Playgroud)

我试过:

results = cross_val_score(estimator, input_var, [output_var[:,0], output_var[:,1], output_var[:,2]], cv=kfold)
Run Code Online (Sandbox Code Playgroud)

results = cross_val_score(estimator, input_var, [output_var[:,0:1], output_var[:,1:2], output_var[:,2:3]], cv=kfold)
Run Code Online (Sandbox Code Playgroud)

results = cross_val_score(estimator, input_var, output_var, cv=kfold)
Run Code Online (Sandbox Code Playgroud)

我收到错误消息,如:

详细信息:ValueError:检查模型目标时出错:您传递给模型的 Numpy 数组列表不是模型预期的大小。预计会看到 3 个数组,但得到了以下 1 个数组的列表: [array([[ 0.69945297, 0.13296847, 0.06292328],

或者

ValueError:发现样本数量不一致的输入变量:[72963, 3]

那么我该如何解决这个问题呢?

谢谢。

小智 0

我不知道你的数据是什么样子,但我认为它是如何将它们堆叠在一起。我尝试过以下过程

input_var = np.random.randint(0,1, size=(100,3))
x = np.sum(np.sin(input_var),axis=1,keepdims=True) # (100,1)
y = np.sum(np.cos(input_var),axis=1,keepdims=True) # (100,1)
z = np.sum(np.sin(input_var)+ np.cos(input_var),axis=1, keepdims=True) # (100,1)

output_var = np.hstack((x,y,z))
# evaluate model
estimator = KerasRegressor(build_fn=create_model, epochs=10, batch_size=8, verbose=0)
kfold = KFold(n_splits=10)
results = cross_val_score(estimator, input_var, output_var, cv=kfold)
Run Code Online (Sandbox Code Playgroud)

我遇到的唯一问题是 Tensorlfow 抱怨不使用张量我希望这能有所帮助,如果不让我知道你的数据的维度看起来像