如何改变中间层的张量形状?
How to change the tensor shape in middle layers?
说我有一个 2000x100 矩阵,我将它放入 10 维嵌入层,这给了我 2000x100x10 张量。所以它有 2000 个示例,每个示例都有一个 100x10 矩阵。然后,我将它传递给 conv1d 和 KMaxpolling 以获得 2000x24 矩阵,这是 2000 个示例,每个示例都有一个 24 维向量。现在,我想在应用另一层之前重新组合这些示例。我想将前 10 个示例组合在一起,等等,所以我得到一个元组。然后我将该元组传递给下一层。
我的问题是,我可以用 Keras 做到这一点吗?以及如何做的任何想法?
使用"samples"的想法是这些样本应该是唯一的并且彼此不相关。
这是 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
包含第一个维度(批量大小) - 在这里你必须记住上面的警告:某处你需要撤消此更改,以便最终获得与输入相同的批次大小。
说我有一个 2000x100 矩阵,我将它放入 10 维嵌入层,这给了我 2000x100x10 张量。所以它有 2000 个示例,每个示例都有一个 100x10 矩阵。然后,我将它传递给 conv1d 和 KMaxpolling 以获得 2000x24 矩阵,这是 2000 个示例,每个示例都有一个 24 维向量。现在,我想在应用另一层之前重新组合这些示例。我想将前 10 个示例组合在一起,等等,所以我得到一个元组。然后我将该元组传递给下一层。 我的问题是,我可以用 Keras 做到这一点吗?以及如何做的任何想法?
使用"samples"的想法是这些样本应该是唯一的并且彼此不相关。
这是 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
包含第一个维度(批量大小) - 在这里你必须记住上面的警告:某处你需要撤消此更改,以便最终获得与输入相同的批次大小。