首页 > 解决方案 > 在 Keras 中使用 Lambda 层对值进行排序

问题描述

我正在构建一个 DNN,在对这些值进行排序后,我需要从一个隐藏层到下一个隐藏层的值。我正在考虑使用 Lambda 层进行排序,但是它在编译时给我带来了错误。这是一个显示问题的简单代码。

x = np.array([[0.3, 0.2, 0.7, 0.4], 
              [0.5, 0.3, 0.3, 0.4], 
              [0.1, 0.9, 0.4, 0.4], 
              [0.3, 0.4, 0.1, 0.2], 
              [0.8, 0.3, 0.2, 0.3]])
y = np.array([1,0,1,0,1])

x = x.reshape(-1, 1, 4)
y = y.reshape(-1, 1, 1)

上面的“x”是我的输入,我想按升序对值进行排序,然后将其传递给前馈网络。请注意,在我原来的问题中,“x”值来自之前的隐藏层,它们不是输入值。出于说明目的,我在这里将它们显示为输入值。这是我的简单神经网络

from keras.models import Input
from keras.models import Model
from keras.layers import Dense
from keras.layers import Lambda
from keras import optimizers
import tensorflow as tf

def sortInput(x):    
    sorted_x = tf.sort(x, axis=-1, direction='ASCENDING', name=None)
    #sorted_x = sorted_x.reshape(-1,1)
    return(sorted_x)

inp = Input(shape=(1, 4))
sorted_inp = Lambda(sortInput)(inp)
ie = Dense(10, activation="relu")(sorted_inp)
oup = Dense(1, activation="sigmoid")(ie)

mini_mdl = Model(inputs = inp, outputs = oup)

adam_optimizer = optimizers.adam(learning_rate = 0.01)

mini_mdl.compile(loss='binary_crossentropy', optimizer=adam_optimizer, metrics=['accuracy'])

上面的代码在编译过程中失败。你能帮我解决这个问题吗?

标签: sortingkeraslambdalayer

解决方案


在 sort 调用中将轴值从 -1 更改为 1 已解决问题。所以该行应如下所示:

sorted_x = tf.sort(x, axis=1, direction='ASCENDING', name=None)

推荐阅读