我有一个包含多个输入的网络,我将前10个输入分开,然后计算加权总和,然后将其与其余输入连接起来:
first = Lambda(lambda z: z[:, 0:11])(d_inputs)
wsum_first = Lambda(calcWSumF)(first )
d_input = concatenate([d_inputs, wsum_first], axis=-1)
函数定义为:
w_vec = K.constant(np.array([range(10)]*64).reshape(10, 64)) # batch size is 64
def calcWSumF(x):
y = K.dot(w_vec, x)
y = K.expand_dims(y, -1)
return y
我想要一个常数向量来计算输入的第一部分的加权和。串联不起作用,因为形状不匹配。如何正确实现呢?
答案 0 :(得分:1)
使用=
和仅包含系数的向量可以更好地编写此代码。此外,无需使用固定的批次大小(可以是任何数量):
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv, char **envp)
{
for (char **env = envp; *env != 0; env++)
{
char *pair = *env;
char *value = strchr(pair, '=');
if (value != NULL) {
printf("%s\n", value + 1);
}
}
}
请注意,为使其更通用,我们在lambda函数中添加了另一个参数(K.sum
),该参数指定了从一开始就要考虑的元素数量。