Machine learning Keras自定义图层2D输入->;二维输出 我有一个2D输入(或者3D,如果一个考虑了样本的数量),我想应用一个KARAS层,它将接受这个输入并输出另一个2D矩阵。例如,如果我有一个大小为(ExV)的输入,学习权重矩阵是(SxE),输出是(SxV)。我能用致密层做这个吗

Machine learning Keras自定义图层2D输入->;二维输出 我有一个2D输入(或者3D,如果一个考虑了样本的数量),我想应用一个KARAS层,它将接受这个输入并输出另一个2D矩阵。例如,如果我有一个大小为(ExV)的输入,学习权重矩阵是(SxE),输出是(SxV)。我能用致密层做这个吗,machine-learning,neural-network,keras,keras-layer,Machine Learning,Neural Network,Keras,Keras Layer,编辑(Nassim请求): 第一层什么也不做。这只是给Lambda层一个输入: from keras.models import Sequential from keras.layers.core import Reshape,Lambda from keras import backend as K from keras.models import Model input_sample = [ [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17

编辑(Nassim请求):

第一层什么也不做。这只是给Lambda层一个输入:

from keras.models import Sequential
from keras.layers.core import Reshape,Lambda
from keras import backend as K
from keras.models import Model

input_sample = [
[[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]]
,[[21,22,23,24,25],[26,27,28,29,30],[31,32,33,34,35],[36,37,38,39,40]]
,[[41,42,43,44,45],[46,47,48,49,50],[51,52,53,54,55],[56,57,58,59,60]]
]


model = Sequential()
model.add(Reshape((4,5), input_shape=(4,5)))
model.add(Lambda(lambda x: K.transpose(x)))
intermediate_layer_model = Model(input=model.input,output=model.layers[0].output)
print "First layer:"
print intermediate_layer_model.predict(input_sample)
print ""
print "Second layer:"
intermediate_layer_model = Model(input=model.input,output=model.layers[1].output)
print intermediate_layer_model.predict(input_sample)

您需要的可能是自动编码器


这取决于你想做什么。它是二维的,因为它是一个序列吗?然后,LSTM就是为此而生成的,如果您设置return_sequence=True,那么如果需要大小,它将返回一个序列

CNN还可以处理2D输入,并根据您使用的内核数量输出大小可变的内容

否则,您可以将其重塑为(E x V,)1D张量,使用具有SxV维度的密集层,并将输出重塑为(S,V)2D张量

我帮不了你更多,我们需要知道你的用例:-)神经网络有太多的可能性

编辑:

您可以使用时间分布(密集)。 如果您的输入有一个形状(E,V),您可以将其重塑为(V,E),以V作为“时间维度”。然后应用TimeDistributed(Dense(S)),这将是一个具有权重(ExS)的稠密层,输出将具有形状(V,S),因此可以将其重塑为(S,V)

这就是你想要的吗?TimeDistributed()层将使用共享权重对输入的每个V行应用相同的密集层

编辑2:

在查看keras后端的代码后,发现要使用tensorflow的转置,并提供“置换模式”选项,您需要使用K.permute_维度(x,pattern)。必须包括批次维度。就你而言:

Lambda(lambda x: K.permute_dimensions(x,[0,2,1]))

K.转置(x)在内部使用相同的函数(对于tf后端),但置换设置为默认值,即[n,n-1,…,0]。

Hi,感谢您的回复。不是序列,因此不能使用LSTM。我也考虑过CNN,但它没有学习权重(SxE)矩阵,因为它将共享权重。重塑的可能性也不起作用,因为情况正好相反,即所有权重将同时应用于每个神经元。用另一个命题编辑:)这就是你想要的吗?谢谢,我想就是这样!这是一种既好又聪明的方法附加说明:不得使用Keras重塑层进行转置计算,因为该层不进行转置。