使用双向 LSTM 的形状的 ValueError
ValueError with Shapes using Bidirectional LSTM
我正在尝试为序列到序列模型实现双向 LSTM。我已经用 12 个特征对我的序列进行了单热编码。输入为 11 步,而输出为 23 步。首先,我编写了这个 LSTM 实现,它使用第一个 LSTM 作为编码器,第二个作为解码器。
model = Sequential()
model.add(LSTM(75, input_shape=(11, 12)))
model.add(RepeatVector(23))
model.add(LSTM(50, return_sequences=True))
model.add(TimeDistributed(Dense(12, activation='softmax')))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()
X, y = generate_data(1, taskset, trainset)
model.fit(X, y, epochs=1, batch_size=32, verbose=1)
然后我尝试将其转换为双向 LSTM,如下所示:
model = Sequential()
model.add(Bidirectional(LSTM(75, return_sequences=True), input_shape=(11,12), merge_mode='concat'))
model.add(Bidirectional(LSTM(50, return_sequences=True)))
model.add(TimeDistributed(Dense(12, activation='softmax')))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics= ['accuracy'])
model.summary()
X, y = generate_data(1, taskset, trainset)
model.fit(X, y, epochs=1, batch_size=32, verbose=1)
目标是使用第一个双向 LSTM 作为编码器,第二个双向 LSTM 作为解码器。我在双向实现中删除了 RepeatVector,因为它给了我一个维度错误(需要 dim=2,收到 dim=3)。使用当前的双向 LSTM 我收到此错误:
ValueError: Shapes (None, 23, 12) and (None, 11, 12) are incompatible
如果能帮助我修复双向 LSTM 实现,我将不胜感激!
只需在您的第一个双向 LSTM 中设置 return_sequences=False
并像以前一样添加 RepeatVector(23)
即可正常工作
n_sample = 10
X = np.random.uniform(0,1, (n_sample, 11, 12))
y = np.random.randint(0,2, (n_sample, 23, 12))
model = Sequential()
model.add(Bidirectional(LSTM(75), input_shape=(11,12), merge_mode='concat'))
model.add(RepeatVector(23))
model.add(Bidirectional(LSTM(50, return_sequences=True)))
model.add(TimeDistributed(Dense(12, activation='softmax')))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics= ['accuracy'])
model.fit(X, y, epochs=3, batch_size=32, verbose=1)
我正在尝试为序列到序列模型实现双向 LSTM。我已经用 12 个特征对我的序列进行了单热编码。输入为 11 步,而输出为 23 步。首先,我编写了这个 LSTM 实现,它使用第一个 LSTM 作为编码器,第二个作为解码器。
model = Sequential()
model.add(LSTM(75, input_shape=(11, 12)))
model.add(RepeatVector(23))
model.add(LSTM(50, return_sequences=True))
model.add(TimeDistributed(Dense(12, activation='softmax')))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()
X, y = generate_data(1, taskset, trainset)
model.fit(X, y, epochs=1, batch_size=32, verbose=1)
然后我尝试将其转换为双向 LSTM,如下所示:
model = Sequential()
model.add(Bidirectional(LSTM(75, return_sequences=True), input_shape=(11,12), merge_mode='concat'))
model.add(Bidirectional(LSTM(50, return_sequences=True)))
model.add(TimeDistributed(Dense(12, activation='softmax')))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics= ['accuracy'])
model.summary()
X, y = generate_data(1, taskset, trainset)
model.fit(X, y, epochs=1, batch_size=32, verbose=1)
目标是使用第一个双向 LSTM 作为编码器,第二个双向 LSTM 作为解码器。我在双向实现中删除了 RepeatVector,因为它给了我一个维度错误(需要 dim=2,收到 dim=3)。使用当前的双向 LSTM 我收到此错误:
ValueError: Shapes (None, 23, 12) and (None, 11, 12) are incompatible
如果能帮助我修复双向 LSTM 实现,我将不胜感激!
只需在您的第一个双向 LSTM 中设置 return_sequences=False
并像以前一样添加 RepeatVector(23)
即可正常工作
n_sample = 10
X = np.random.uniform(0,1, (n_sample, 11, 12))
y = np.random.randint(0,2, (n_sample, 23, 12))
model = Sequential()
model.add(Bidirectional(LSTM(75), input_shape=(11,12), merge_mode='concat'))
model.add(RepeatVector(23))
model.add(Bidirectional(LSTM(50, return_sequences=True)))
model.add(TimeDistributed(Dense(12, activation='softmax')))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics= ['accuracy'])
model.fit(X, y, epochs=3, batch_size=32, verbose=1)