Python Keras中的输入整形与模型训练

Python Keras中的输入整形与模型训练,python,tensorflow,neural-network,keras,Python,Tensorflow,Neural Network,Keras,我知道目前有一些很好的帖子在讨论这个话题(非常好,非常详细),但经过2个小时的努力,我仍然有一些问题: 只是为了有一些背景:我正在获取一些wav文件的频谱图(16 kHz,3秒分为20毫秒)并将其输入神经网络,以确定它们是否包含一个具体的单词(考虑确定性范围为0到1) 我实际上得到了以下错误: ValueError('Error when checking target: expected activation_1 to have 3 dimensions, but got array with

我知道目前有一些很好的帖子在讨论这个话题(非常好,非常详细),但经过2个小时的努力,我仍然有一些问题:

只是为了有一些背景:我正在获取一些wav文件的频谱图(16 kHz,3秒分为20毫秒)并将其输入神经网络,以确定它们是否包含一个具体的单词(考虑确定性范围为0到1)

我实际上得到了以下错误:

ValueError('Error when checking target: expected activation_1 to have 3 dimensions, but got array with shape (3, 1)',)
在检查局部var值时,我花了将近一个小时试图更好地解释问题,我想我更想问一下,我是否给出了正确的输入形状,如何使用展平/重塑层来获得每个样本的单个值输出


很抱歉,无法更加具体

请在“密集”之后添加一个“平坦”层,并在“平坦”层之后添加一个“密集”层,其中单位数应等于您期望的输出形状。在这种情况下,我们期望一个值。因此
density(1)

我运行了上面的代码,没有任何问题。请检查一下这个

在模型上进行预测时

# Since i don't have the original data, i am creating some random values
test = np.random.rand(161,157)
test = np.expand_dims(test,axis=0)
model.predict(test)

您能否打印
输入的形状
variableshape=(3161157)从外观上看,您正在尝试为时间序列数据构建模型。为什么不使用
LSTM
而不是
Dense
layer主要是因为我对不同类型的网络和层缺乏了解,我仍然使用基本索引,运行代码时没有问题。但似乎把这三个样本作为一个样本。如果我尝试预测另一个样本(仅将第一个样本作为参数传递),它会要求第三个维度。在使用它预测输出之前,对数据使用np.expand_dims。我在回答问题的同时添加了代码。在编译和执行方面,代码是正确的。运行后,输出与期望结果不匹配。因此,正如您之前所评论的,这里可能存在设计问题。我将尝试看看哪个模型更适合输入数据(从LSTM、thx开始)。
inputs = np.random.rand(3,161,157)
model= Sequential()
model.add(Dense(10,input_shape=(161,157)))
model.add(Flatten())
model.add(Dense(1))
model.add(Activation('sigmoid'))

model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])
model.summary()
results=np.array([[1.],[1.],[0.]])
model.fit(inputs,results,epochs=10)
# Since i don't have the original data, i am creating some random values
test = np.random.rand(161,157)
test = np.expand_dims(test,axis=0)
model.predict(test)