Sorting 使用Keras中的Lambda层对值进行排序
我正在构建一个DNN,在对这些值进行排序后,我需要将这些值从一个隐藏层传递到下一个隐藏层。我正在考虑使用Lambda层进行排序,但是在编译时它会给我带来错误。下面是一个简单的代码来说明这个问题Sorting 使用Keras中的Lambda层对值进行排序,sorting,keras,lambda,layer,Sorting,Keras,Lambda,Layer,我正在构建一个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],
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'])
上述代码在编译过程中失败。您能帮我解决这个问题吗?将排序调用中的轴值从-1更改为1已经解决了这个问题。所以这行应该是这样的:
sorted_x = tf.sort(x, axis=1, direction='ASCENDING', name=None)