因此,每次我尝试编写 CNN 或 RNN 时,我都无法理解维度是如何工作的。
我不明白为什么模型会编译,这在我看来意味着上一层的输出维度是下一层的输入维度,依此类推(各层相互兼容)。那么,当我拟合我的模型时,怎么可能在第 3 层或第 4 层(或除第一层之外的任何其他层)中出现错误,说对于 ex 它期望 3 维但得到 2。
在一个更精确的例子中,假设我有以下一次性模型:
vocab_size =10000 src_txt_length =10 sum_txt_length = 100 inputs = Input(shape=(src_txt_length,)) encoder1 = Embedding(vocab_size, 128)(inputs) encoder2 = LSTM(128)(encoder1) encoder3 = RepeatVector(sum_txt_length)(encoder2) decoder1 = LSTM(128, return_sequences=True)(encoder3) outputs = TimeDistributed(Dense(vocab_size, activation='softmax'))(decoder1) model = Model(inputs=inputs, outputs=outputs) model.compile(loss='categorical_crossentropy', optimizer='adam') model.fit(X,y)
我在 TimeDistributed 层中收到一个错误,说它需要 3 个维度但得到了 2 个维度。
X.shape == (20000,10)
len(y) == 20000 # y is a list of labels 0s and 1s
所以如果我想在纸上拟合数据时计算每一层的尺寸,我该怎么做呢?