首页 > 解决方案 > 张量流值错误形状不兼容

问题描述

嘿伙计们,我是 tensorflow 的新手,我正在尝试开发一个 cnn 和 lstm 模型来预测基于文本的扇区。但是,我一直遇到错误 V alueError: 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)

标签: pythontensorflownlpconv-neural-networklstm

解决方案


推荐阅读