python - lstm_9 层的输入 0 与发现 ndim=4 的 : expected ndim=3, 层不兼容。完整形状收到 : [None, 2, 4000, 256]

标签 python neural-network recurrent-neural-network

我尝试使用 RNN 网络创建模型,但收到:层 lstm_9 的输入 0 与该层不兼容:预期 ndim=3,发现 ndim=4。收到完整形状:[无、2、4000、256]错误。

输入

train_data.shape() = (100,2,4000)

train_labels.shape() =(100,)

labels_values = 0 or 1 (two classes)

型号

input = Input(shape=(2,4000)) # shape from train_data
embedded = Embedding(2, 256)(input) 
lstm = LSTM(1024, return_sequences=True)(embedded) # ERROR
dense = Dense(2, activation='softmax')(lstm) 

最佳答案

不幸的是,您使用嵌入层设计 Keras 功能模型的整个概念是错误的。

  1. 当您使用嵌入层时,它需要二维数据。
Input shape

2D tensor with shape: (batch_size, sequence_length).

Output shape

3D tensor with shape: (batch_size, sequence_length, output_dim).

引用号:https://keras.io/layers/embeddings/

它需要词汇表的一系列 ID 或标记。这必须是一个整数数组。

假设我们的词汇表的长度为 36,我们向它传递一个范围为 (0, 36) 的整数数组列表

[1, 34, 32, 23] 有效 [0.2, 0.5] 无效

  • 通常,我们使用 Embedding 来表示缩减空间中的向量,因此 output_dim 低于 input_dim,但根据设计,反之亦然。

  • 您需要指定输入数据的input_length。

  • 如果您使用return_sequences = True,时间维度将传递到下一个维度,这在您的情况下是不需要的。

  • 标签的形式为 (0, 1, 0, 1, 0, 0, ...),而不是 one-hot-encoded 形式,因此不要使用 softmax,而应使用 1 个单位的 sigmoid在最后的密集中。

  • 这是经过一定程度修正的网络。

    from tensorflow.keras.layers import *
    from tensorflow.keras.models import *
    import numpy as np
    train_data = np.random.randint(0,3, (100, 4000))
    y_labels = np.random.randint(0,2, (100,))
    
    input_ = Input(shape=(4000)) # shape from train_data
    embedded = Embedding(36, 256, input_length = 4000)(input_) 
    lstm = LSTM(256, return_sequences=False)(embedded) # --> ERROR
    dense = Dense(1, activation='softmax')(lstm) 
    
    model = Model(input_, dense)
    model.summary()
    
    Model: "model"
    _________________________________________________________________
    Layer (type)                 Output Shape              Param #   
    =================================================================
    input_6 (InputLayer)         [(None, 4000)]            0         
    _________________________________________________________________
    embedding_5 (Embedding)      (None, 4000, 256)         9216      
    _________________________________________________________________
    lstm_5 (LSTM)                (None, 256)               525312    
    _________________________________________________________________
    dense (Dense)                (None, 1)                 257       
    =================================================================
    Total params: 534,785
    Trainable params: 534,785
    Non-trainable params: 0
    

    关于python - lstm_9 层的输入 0 与发现 ndim=4 的 : expected ndim=3, 层不兼容。完整形状收到 : [None, 2, 4000, 256],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61499265/

    相关文章:

    lua - 在Torch/Lua中,加载保存的模型和使用Xavier权重初始化方法有什么区别?

    neural-network - 如何设计深度卷积神经网络?

    python - 使用 LSTM 层在 Keras 中进行预测

    python - 如何从 Microsoft Azure 的 Jupyter Notebook 中的 Kaggle 读取文件?

    matlab - 为什么MatConvNet说数据和导数没有匹配的格式?

    python - scikit-learn 中 predict 与 predict_proba 的区别

    python - Multi RNN 不适用于相同 Base LSTM 单元的列表

    algorithm - 是否存在进行波前迭代器的有效方法? (与物理无关。)

    python - 在pygame中使用文本输入

    python - 查找opencv矩形的顶部和底部的y坐标