我用librosa把声音转换成了声谱图。平面图的形状是(257,356),我把它重塑为(257,356,1)。
我创造了一个模型
from keras.models import Sequential
from keras.layers import Dense, Conv2D, Flatten
model = Sequential()
model.add(Conv2D(64, kernel_size=3, activation='relu', input_shape=A.shape))
model.add(Flatten())
model.add(Dense(1, activation='softmax'))在对模型进行拟合时,会产生跟随误差。
model.fit(A,validation_data=(A2), epochs=3)其中,A2是另一个具有以下维度的谱图
ValueError: Error when checking input: expected conv2d_3_input to have 4 dimensions, but got array with shape (257, 356, 1)模型摘要
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_24 (Conv2D) (None, 255, 354, 64) 640
_________________________________________________________________
conv2d_25 (Conv2D) (None, 253, 352, 32) 18464
_________________________________________________________________
flatten_11 (Flatten) (None, 2849792) 0
_________________________________________________________________
dense_11 (Dense) (None, 10) 28497930
=================================================================
Total params: 28,517,034
Trainable params: 28,517,034
Non-trainable params: 0和A的形状是
A[0].shape = (356, 1)发布于 2020-01-03 13:19:53
编辑:这是我的工作代码:
from keras.models import Sequential
from keras.layers import Dense, Conv2D, Flatten
import numpy as np
A = np.zeros((1,257,356,1)) # Only for illustration
A2 = np.zeros((1,1)) # Only for illustration
model = Sequential()
model.add(Conv2D(64, kernel_size=(3,3), activation='relu', input_shape=A.shape[1:])) # input_shape ==> (257,356,1)
model.add(Flatten())
model.add(Dense(1, activation='softmax'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(A, A2, validation_data = (A, A2), epochs=3)这是三个时代的输出:
Train on 1 samples, validate on 1 samples
Epoch 1/3
1/1 [==============================] - 0s 250ms/step - loss: 0.0000e+00 - accuracy: 1.0000 - val_loss: 0.0000e+00 - val_accuracy: 1.0000
Epoch 2/3
1/1 [==============================] - 0s 141ms/step - loss: 0.0000e+00 - accuracy: 1.0000 - val_loss: 0.0000e+00 - val_accuracy: 1.0000
Epoch 3/3
1/1 [==============================] - 0s 156ms/step - loss: 0.0000e+00 - accuracy: 1.0000 - val_loss: 0.0000e+00 - val_accuracy: 1.0000
<keras.callbacks.callbacks.History at 0x1d508dbb708>发布于 2020-01-03 13:35:42
您缺少模型中的批处理大小。
二维卷积的输入形状为(batch, spatial1, spatial2, channels)。
我不知道你的数据结构,但你似乎没有批次?(如果这是真的,您需要创建大小为1的批处理维度,但这根本不会很好地训练,您需要大量的数据,而不是一个例子)。
因此,A.shape必须是(1, 257,356, 1),第一个是批处理大小,最后是通道数。另外两个数字是“图像”的空间维数。
而且您的input_shape不能包括批处理大小:input_shape=(257,356,1)。
发布于 2020-01-03 13:47:37
请注意keras official documentation page上类似VGG的convnet示例。正如@Daniel所提到的,input_shape必须定义为(number_of_examples, height, width, channel)的元组。
作为参考,假设您有500个样本,您的输入数据应该如下所示:
x_train = np.random.random((500, 257, 356, 1))
print(x_train.shape)
(500, 257, 356, 1)https://stackoverflow.com/questions/59578786
复制相似问题