首页 文章

使用自定义尺寸输入tensorflow或keras神经网络输入

提问于
浏览
0

我想提供以下形状的神经网络输入:每个训练条目是尺寸为700x10的2D阵列 . 共有204个培训条目 . 标签只是一维大小为204的数组(二进制输出)

我试图使用Dense图层:

model = Sequential()
model.add(Dense(300, activation='relu', input_shape=(700, 10)))
model.add(Dense(1, activation='sigmoid'))

但后来我得到了跟随错误(与第一层的input_shape无关,但在输出验证期间):

ValueError: Error when checking target: expected dense_2 to have 3 dimensions, but got array with shape (204, 1)

204 - 训练数据量 .

堆栈跟踪:

model.fit(xTrain, yTrain, epochs=4, batch_size=6)
  File "keras\models.py", line 867, in fit
    initial_epoch=initial_epoch)
  File "keras\engine\training.py", line 1522, in fit
    batch_size=batch_size)
  File "keras\engine\training.py", line 1382, in _standardize_user_data
    exception_prefix='target')
  File "keras\engine\training.py", line 132, in _standardize_input_data

我在调试Keras代码时发现了什么:

在培训前验证期间失败 . 它验证输出数组 .

根据神经网络结构,第一个Dense层以某种方式产生700,1维输出,之后失败,因为我的输出只是1-d数组,其中有204个 .

我该如何克服这个问题?我试图在Dense()层之后添加Flatten(),但它可能会以一种糟糕的方式影响准确性:我想保留特定于700个数组的一个点的信息 .

1 回答

  • 3

    Dense 图层仅适用于一个维度,即最后一个维度 .

    如果您正在输入 (700,10) ,它将输出 (700,units) . 检查你的 model.summary() 看到这个 .

    一个简单的解决方案是在应用密集之前展平数据:

    model.add(Flatten(input_shape=(700,10)))
    model.add(Dense(300,...))
    model.add(Dense(1,...))
    

    这样,Dense图层将看到一个简单的 (7000,) 输入 .


    现在,如果您希望模型分别理解这两个维度,您应该尝试更详细的结构 . 该怎么做将在很大程度上取决于您的数据是什么以及您想要做什么,您希望模型如何理解它等等 .

相关问题