python - Keras——嵌入层的输入形状

标签 python machine-learning neural-network keras

我正在尝试在 Keras 中使用如下所示的层实现卷积自动编码器。我的数据有 1108 行和 29430 列。

def build(features, embedding_dims, maxlen, filters, kernel_size):
    m = keras.models.Sequential()

    m.add(Embedding(features, embedding_dims, input_length=maxlen))
    m.add(Dropout(0.2))

    m.add(Conv1D(filters, kernel_size, padding='valid', activation='relu', strides=1, input_shape=(len(xx), features) ))
    m.add(MaxPooling1D())

    m.add(Conv1D(filters, kernel_size, padding='valid', activation='relu', strides=1, input_shape=(None, len(xx), features) ))
    m.add(UpSampling1D())

    m.summary()
    m.compile(optimizer="adagrad", loss='mse', metrics=['accuracy'])
    return m

early = keras.callbacks.EarlyStopping(
        monitor='val_loss', patience=10, verbose=1, mode='min')

model = build(len(xx[0]), 60, 11900, 70, 3)

model.fit(xx, xx, batch_size=4000, nb_epoch=10000,validation_split=0.1, 
    callbacks=[early])

但是,我收到一条错误消息,指出 ValueError: Error when checking input: expected embedding_1_input to have shape (None, 11900) but got array with shape (1108, 29430)。为什么第一层会期望 (None, maxlen) 而不是数据的大小?

我还将包含我的模型摘要:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
embedding_1 (Embedding)      (None, 11900, 60)         714000    
_________________________________________________________________
dropout_1 (Dropout)          (None, 11900, 60)         0         
_________________________________________________________________
conv1d_1 (Conv1D)            (None, 11898, 70)         12670     
_________________________________________________________________
max_pooling1d_1 (MaxPooling1 (None, 5949, 70)          0         
_________________________________________________________________
conv1d_2 (Conv1D)            (None, 5947, 70)          14770     
_________________________________________________________________
up_sampling1d_1 (UpSampling1 (None, 11894, 70)         0         
=================================================================
Total params: 741,440
Trainable params: 741,440
Non-trainable params: 0
_________________________________________________________________

最佳答案

我通过向嵌入层添加一个 input_shape 字段来修复这个特定错误,如下所示:

m.add(Embedding(features, embedding_dims, input_length=maxlen, input_shape=(features, ) ))

features 是特征的数量 (29430)。

关于python - Keras——嵌入层的输入形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45111142/

相关文章:

apache-spark - 在 Java 中为 Apache Spark MLlib 构建 LabeledPoint of Features 的最佳方法

python - 在 keras 中加载模型后的不同预测

neural-network - 假设空间知道神经网络吗?

python - python中的多处理-forkserver进程从父进程继承了什么?

python - 在 Django 中对与特定类相关的帖子进行注释和计数

python - Pip 正在尝试构建 numpy 而不是在 M1 Mac 上使用预构建的版本

machine-learning - 当我们有 K 最近邻的稀疏数据集时如何计算距离

python - 混合占位符、executemany 和表名

machine-learning - 解释使用一对一选择输出的多类 SVM

machine-learning - 神经网络如何计算权重之和?