本文采用pearson相关系数作为MLP模型的输入特征,在建立模型时遇到了一些问题。在
我已经根据今天的好评更新并运行了我的代码,即将函数包装在Lambda层中,但是同样的错误仍然发生。我想我已经修正了今天提到的错误。以下是我更新的代码:
from keras.layers import Conv2D, Input, Lambda, MaxPooling2D, BatchNormalization, Add, Flatten, Dense, Concatenate
from keras.models import Model, Sequential
import keras.backend as K
def cal_cor(x):
a, b = x
assert a.shape[1] == b.shape[1], 'lengths not compatible'
a_mean = K.mean(a)
b_mean = K.mean(b)
a_norm = a - a_mean
b_norm = b - b_mean
numerator = a_norm * b_norm
a_var = K.square(a_norm)
b_var = K.square(b_norm)
denominator = (a_var * b_var) ** 0.5
return numerator / denominator
def cnn_with_pearson():
# Pearson part
cor_layer = Lambda(function=cal_cor, name='correlation_layer')
cors = []
for i in range(28):
cor_added = []
for j in range(28):
if i == j:
continue
cor_added.append( cor_layer( [input[:, i, :, 0], input[:, j, :, 0]] ) )
cors.append(Add()(cor_added))
con = Concatenate()(cors)
f = Flatten()(K.expand_dims(con, -1))
d = Dense(units=10, activation='softmax')(f)
model = Model(inputs=input, outputs=d)
return model
model = cnn_with_pearson()
在model = Model(inputs=input, outputs=d)
行中发生错误:
您必须将函数包装在^{} 层中,以便Keras能够跟踪它并用必要的信息扩充它返回的张量。为此,还需要修改函数的定义,因为它必须以张量列表作为输入:
然后为其定义Lambda层:
^{pr2}$然后像这样使用它:
注意,为了添加,我们还需要使用^{} 层(
from keras.layers import Add
)。在相关问题 更多 >
编程相关推荐