我想提供以下形状的神经网络输入: 每个训练条目都是尺寸为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代码时发现的内容:
在培训前验证期间失败。它验证输出数组。
根据神经网络结构,第一个密集层以某种方式产生700,1维输出,之后失败,因为我的输出只是一维数组,其中有204个。
我如何克服这个问题?我试图在Dense()层之后添加Flatten(),但它可能会以一种糟糕的方式影响准确性:我想保留特定于700个数组的一个点的信息。
答案 0 :(得分: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,)
输入。
现在,如果您确实希望模型分别理解这两个维度,那么您应该尝试更详细的结构。做什么将取决于您的数据是什么以及您想要做什么,您希望模型如何理解它等等。