当前位置: 首页 > 知识库问答 >
问题:

输入具有自定义维度的张量流或Keras神经网络

应翰飞
2023-03-14

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

我试图只使用密集层:

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

但是我得到了以下错误(与第一层上的input\u形状无关,但在输出验证期间):

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代码时发现:

培训前验证失败。它验证输出数组。

根据神经网络的结构,第一个密集层以某种方式产生700个一维输出,然后失败,因为我的输出只是一个一维阵列,其中有204个。

我如何克服这个问题?我试图在Dense()层之后添加Flatten(),但这可能会对精度产生不良影响:我希望将700个阵列中特定于一个点的信息分组。

共有1个答案

习高格
2023-03-14

密集层仅适用于一个维度,即最后一个维度。

如果您正在向其输入(700,10),它将输出(700,单位)。检查您的型号。summary()查看此内容。

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

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

这样,密集层将看到一个简单的(7000,)输入。

现在,如果您确实希望您的模型单独理解这两个维度,您可能应该尝试更详细的结构。做什么将在很大程度上取决于您的数据是什么和您想做什么,您希望您的模型如何理解它,等等。

 类似资料:
  • 我正在制作这个CNN模型 ''' 但这是给我一个错误:-InvalidArgumentError:负尺寸造成的减去2从1'{{nodeconv2d_115/Conv2D}}=Conv2D[T=DT_FLOAT,data_format="NHWC",膨胀=[1,1,1,1],explicit_paddings=[],填充="VALID",步幅=[1,2,2,1],use_cudnn_on_gpu=t

  • 根据keras文件(https://keras.io/layers/convolutional/)Conv1D输出张量的形状为(batch\u size,new\u steps,filters),而输入张量的形状为(batch\u size,steps,input\u dim)。我不明白这是怎么回事,因为这意味着如果你传递一个长度为8000的1d输入,其中batch\u size=1,steps=

  • 我有32760个音频频谱,计算维度=72(#帧)x 40(#频段),我试图将其输入“宽”卷积神经网络(第一层是4个不同conv层的合奏)。这些频谱没有深度,因此它们可以表示为72 x 40 2D数字浮点数组,因此分类器的X输入是一个32760个元素长的数组,每个元素都是这些72 x 40 x 1频谱之一。Y输入是一个标签数组,一个热编码,有32760个元素。 当尝试使用 我得到以下错误: 以下是我

  • 我在使用Keras和Python对3D形状进行分类时遇到了一个问题。我有一个文件夹,里面有一些JSON格式的模型。我将这些模型读入Numpy数组。模型是25*25*25,表示体素化模型的占用网格(每个位置表示位置(i、j、k)中的体素是否有点),因此我只有1个输入通道,就像2D图像中的灰度图像一样。我拥有的代码如下: 在此之后,我得到以下错误 使用TensorFlow后端。回溯(最后一次调用):文

  • 真的很难理解keras中卷积1d层的输入维度: 输入形状 带形状的三维张量:(采样、步长、input\u dim)。 输出形状 带形状的三维张量:(采样、新的\u步骤、nb\u过滤器)。由于填充,步骤值可能已更改。 我希望我的网络接受价格的时间序列(101,按顺序)并输出4个概率。我当前的非卷积网络做得相当好(训练集为28000)如下所示: 为了改进这一点,我想从具有长度为10的局部感受野的输入层

  • 我用k个二进制输入(0,1),一个隐藏层和输出层的一个单元实现并训练了一个神经网络。一旦训练完成,我想获得最大化输出的输入(例如,x使输出层的单位最接近1)。到目前为止,我还没有找到它的实现,因此我正在尝试以下方法: 列车网络= 对于这些,我用一个玩具示例(k=2)实现了以下代码。基于上的教程http://outlace.com/Beginner-Tutorial-Theano/但改变了向量y,所