Python 层lstm_9的输入0与层不兼容:预期ndim=3,发现ndim=4。收到完整形状:[无,2400256]

Python 层lstm_9的输入0与层不兼容:预期ndim=3,发现ndim=4。收到完整形状:[无,2400256],python,neural-network,recurrent-neural-network,Python,Neural Network,Recurrent Neural Network,我尝试使用RNN网络创建模型,但收到:层lstm_9的输入0与层不兼容:预期ndim=3,发现ndim=4。收到完整形状:[None,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 embed

我尝试使用RNN网络创建模型,但收到:层lstm_9的输入0与层不兼容:预期ndim=3,发现ndim=4。收到完整形状:[None,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功能模型的整个概念是错误的

  • 当您使用嵌入层时,它需要二维数据
  • 参考:

    它为词汇表获取一系列ID或标记。这必须是一个整数数组

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

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

  • 通常,我们使用嵌入来表示缩减空间中的向量,因此输出维度低于输入维度,但基于设计,情况也可能相反

  • 您需要为输入数据指定输入长度

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

  • 标签的格式为(0,1,0,1,0,0,…),而不是一种热编码格式,因此不要使用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()
    

    我有时间序列类型的数据,其中train_数据[0]是时间,train_数据[1]是振幅,两者都是x.x形式。我的任务是创建RNN模型。我完全同意布金纳:)在这种情况下怎么办?如果我理解我的数据格式不正确是的,它是。嵌入层不与浮动时间序列数据一起使用,我认为如果不进行巧妙的操作,就不会有确定的向量空间进行映射。那就去掉嵌入层吧。
    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