我有大量的n
x m
x m
数组。我想训练一个可学习单个Dense NN的keras模型,以应用于所有n
x 1
列向量。作为一个具体示例,假设A
是6
x 10
x 10
张量;因此,它具有100个6
x 1
列向量。
我有一个训练密集神经网络的keras模型:
import keras as K
import keras.layers as L
def column_nn():
layers=[12,36,12,1]
columns=L.Input(shape=(6,))
x=L.Dense(layers[0],activation='relu')(columns)
for l in layers[1:]:
x=L.Dense(l,activation='relu')(x)
return K.models.Model(inputs=columns, outputs=x)
我想将其应用于100个列向量中的每一个,但是我想返回一个二维的10
x 10
张量,我可以做其他事情,例如传递到Conv2D
层。
想到的一种方法是使用重塑和keras共享层。
data=L.Input(shape=(6,10,10))
column_nn=column()
x=L.Permute((2,3,1))(data)
x=L.Reshape((-1,6))(x)
new_layer=column_nn()(x)
x=L.Reshape((10,10))(new_layer)
# now do a bunch of stuff to the 2-D new_layer, such as
x=L.Conv2d(filters=5,kernel_size=[3,3])(x)
x=L.MaxPooling2D(pool_size=(2,2),strides=(2,2))(x)
x=L.Flatten(x)
output=L.Dense(x)
return K.models.Model(inputs=A,outputs=output)
看起来好吗?我想知道是否有一种轻松的方法来实现这一目标?
答案 0 :(得分:1)
如果将输入数据整形并转置到(m*m, n)
,则可以将Dense(k)
与TimeDistributed
结合使用,将相同的权重分别应用于m ^ 2个向量。输出形状为(m*m, k)
,之后您可以重新调整形状以适合您的需求