我试图将像素向量输入到卷积神经网络(CNN),其中像素向量来自图像数据,如cifar-10数据集。在将像素向量输入CNN之前,我需要用maclaurin系列扩展像素向量。关键是,我知道了如何用一维展开张量,但无法用一维展开张量>;2.有谁能告诉我如何将一维张量的麦克劳林级数应用于一维以上的张量?在TensorFlow或Keras中是否有任何启发式方法来实现这一点?有什么想法吗
CNN上的麦克劳林系列节目:
我找到了用麦克劳林级数展开一维张量的方法。下面是如何抓取实现的外观:
def cnn_taylor(input_dim, approx_order=2):
x = Input((input_dim,))
def pwr(x, approx_order):
x = x[..., None]
x = tf.tile(x, multiples=[1, 1, approx_order + 1])
pw = tf.range(0, approx_order + 1, dtype=tf.float32)
x_p = tf.pow(x, pw)
x_p = x_p[..., None]
return x_p
x_p = Lambda(lambda x: pwr(x, approx_order))(x)
h = Dense(1, use_bias=False)(x_p)
def cumu_sum(h):
h = tf.squeeze(h, axis=-1)
s = tf.cumsum(h, axis=-1)
s = s[..., None]
return s
S = Lambda(cumu_sum)(h)
所以以上的实现是关于如何用一维张量用泰勒展开来展开CNN的一个草图编码尝试。我想知道如何用多维数组(即dim=3)对张量做同样的事情
如果我想用泰勒展开法以2的近似阶展开CNN,其中输入是来自RGB
图像的像素向量,我如何在TensorFlow中轻松实现这一点?有什么想法吗?谢谢
如果我理解正确,所提供的计算图中的每个
x
只是一个标量(像素的一个通道)。在这种情况下,为了将变换应用于每个像素,您可以:(b, h, w, c)
输入展平为(b, h*w*c)
形状的张量李>这可以通过以下方式实现:
注意:我从this answer借用了函数
taylor_expansion_network
更新:我仍然不清楚最终目标,但这次更新可能使我们更接近预期的输出。我修改了
taylor_expansion_network
,将管道的第一部分应用于形状(width, height, nb_channels=3)
的RGB图像,返回形状(width, height, nb_channels=3, max_pow+1)
的张量:在这个修改后的模型中,管道的最后一步,即每个
i
的w_i * s_i
之和不适用。现在,您可以以任何方式使用生成的(width, height, nb_channels=3, max_pow+1)
形张量相关问题 更多 >
编程相关推荐