说我有一个2000x100的矩阵,我将其放入10维嵌入层,这给了我2000x100x10的张量。因此它是2000个示例,每个示例都有一个100x10的矩阵。然后,将其传递给conv1d和KMaxpolling以获得2000x24矩阵,该矩阵为2000个示例,每个示例都有一个24维矢量。现在,我想在应用另一层之前重新组合这些示例。我想将前10个示例结合在一起,如此反复,这样我得到了一个元组。然后将那个元组传递给下一层。 我的问题是,我可以和Keras一起做吗?以及如何做的任何想法?
答案 0 :(得分:0)
使用“样本”的想法是这些样本应该是唯一的并且彼此不相关。
这是Keras对您的模型的要求:如果以2000个样本开头,则必须以2000个样本结尾。理想情况下,这些示例不会互相交谈,但是您可以使用自定义图层来破解,但只能在中间进行。无论如何,您都需要以2000个样本结束。
我相信您将以200个组结束模型,因此也许您应该已经从形状(200,10,100)
开始并使用TimeDistributed
包装器:
inputs = Input((10,100)) #shape (200,10,100)
out = TimeDistributed(Embedding(....))(inputs) #shape (200,10,100,10)
out = TimeDistributed(Conv1D(...))(out) #shape (200,10,len,filters)
#here, you use your layer that will work on the groups without TimeDistributed.
要在不改变批量大小的情况下重塑张量,请使用Reshape(newShape)
层,其中newShape
不包括第一维(批量大小)。
要重塑包含批处理大小的张量,请使用Lambda(lambda x: K.reshape(x,newShape))
层,其中newShape
包括第一维(批处理大小)-在这里您必须记住上面的警告:您需要撤消某些操作此更改使您最终获得与输入相同的批次大小。