大家好,我是 tensorflow 的新手,我正在尝试开发一个 cnn 和 lstm 模型来预测基于文本的扇区。但是,我一直遇到错误 ValueError: Shapes (None, 1, 7) and (None, 7) are incompatible
。我尝试了一种热编码并重塑我的数据,但同样的错误仍然存在。以下代码。
X_train = X_train.reshape(X_train.shape[0], 1, X_train.shape[1])
# x_train =np.reshape(X_train,(2556,1,1))
# y_train = to_categorical(y_train, 3)
for i in range(4):
one_hotted = one_hot(y_train[:,i], tag_counts[i])
one_hotted = one_hotted.reshape(one_hotted.shape[0], 1, one_hotted.shape[1])
models[i].compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
models[i].fit(X_train, one_hotted, epochs=200, batch_size=20)
出现错误
ValueError: Shapes (None, 1, 7) and (None, 7) are incompatible
我正在创建 cnn 模型函数。我想将 cnn 模型与 lstm 结合起来。有没有办法做到这一点?
# create CNN model
from tensorflow.keras.layers import Dense, Conv1D, Dropout, MaxPooling1D, Embedding, Input
from tensorflow.keras import Sequential
from keras.layers import LSTM
def create_model(name, input_dim, output_dim, kern_size):
model = Sequential(name=name)
# hidden layers
series_input = Input(shape=(input_dim, ))
model.add(Conv1D(filters=256, kernel_size=kern_size, activation='relu', padding='same', strides=3, input_shape=series_input.shape))
model.add(MaxPooling1D(pool_size=2, strides=2, padding='same'))
model.add(Conv1D(filters=512, kernel_size=kern_size, activation='relu', padding='same', strides=3))
model.add(MaxPooling1D(pool_size=2, strides=2, padding='same'))
model.add(Dropout(0.5))
model.add(Conv1D(filters=128, kernel_size=kern_size, activation='relu', padding='same', strides=3))
model.add(MaxPooling1D(pool_size=2, strides=2, padding='same'))
model.add(LSTM(100))
model.add(Dense(128, kernel_initializer='normal', activation='relu'))
# output
model.add(Dense(output_dim, activation='softmax'))
# model summary
model.summary()
return model
# one hot encode
def one_hot(arr, n_cat):
output = []
for n in arr:
result = np.zeros(n_cat)
result[n] = 1
output.append(result)
return np.array(output, dtype=int)
我的训练和测试数据形状大小是
Train data shape: (2556, 1474)
Test data shape: (639, 1474)