Python 预期输入有4个维度,但得到了具有形状的数组(32549,1)

Python 预期输入有4个维度,但得到了具有形状的数组(32549,1),python,keras,Python,Keras,我试图用keras测试一个经过训练的cnn模型,但当我运行代码时,“出现错误: 预期输入有4个维度,但得到了形状为(32, 549, 1). 这(32549,1)是我用来训练和测试cnn的对数光谱图的大小,结果很好。除了最后一个错误 我试着用np.rezise(-1,amp)和y=(-1,amp)来增加我的向量,但它不起作用,我真的不知道该怎么做 DIR = 'C:/Users/ROBERTO VILCHEZ/Desktop/Redes/TRAIN/ayuda/ayuda_1.wav' SAM

我试图用keras测试一个经过训练的cnn模型,但当我运行代码时,“出现错误:

预期输入有4个维度,但得到了形状为(32, 549, 1).

这(32549,1)是我用来训练和测试cnn的对数光谱图的大小,结果很好。除了最后一个错误

我试着用np.rezise(-1,amp)和y=(-1,amp)来增加我的向量,但它不起作用,我真的不知道该怎么做

DIR = 'C:/Users/ROBERTO VILCHEZ/Desktop/Redes/TRAIN/ayuda/ayuda_1.wav'
SAMPLE_RATE = 88200
model=load_model('C:/Users/ROBERTO VILCHEZ/Desktop/Redes/mi_modelo.h5')

def read_wav_file(x):
   _, wav = wavfile.read(x) 
   # Normalize
   wav = wav.astype(np.float32) / np.iinfo(np.int16).max
   return wav

def log_spectrogram(wav):
    freqs, times, spec = stft(wav, SAMPLE_RATE, nperseg = 400, noverlap = 240, nfft = 512, padded = False, boundary = None)
    # Log spectrogram
    amp = np.log(np.abs(spec)+1e-10)

    return freqs, times, amp


threshold_freq=5500

eps=1e-10

x=DIR 

wav = read_wav_file(x)

L = 88200

if len(wav) > L:
    i = np.random.randint(0, len(wav) - L)
    wav = wav[i:(i+L)]  

elif len(wav) < L:
    rem_len = L - len(wav)
    silence_part = np.random.randint(-100,100,88200).astype(np.float32) / 

np.iinfo(np.int16).max
j = np.random.randint(0, rem_len)
silence_part_left  = silence_part[0:j]
silence_part_right = silence_part[j:rem_len]
wav = np.concatenate([silence_part_left, wav, silence_part_right])
freqs, times, spec = stft(wav, L, nperseg = 400, noverlap = 240, nfft = 
512, padded = False, boundary = None)

if threshold_freq is not None:
    spec = spec[freqs <= threshold_freq,:]
    freqs = freqs[freqs <= threshold_freq]

    amp = np.log(np.abs(spec)+eps)

    y = np.expand_dims(amp, axis=3)

    res = model.predict(y)
DIR='C:/Users/ROBERTO VILCHEZ/Desktop/Redes/TRAIN/ayuda/ayuda_1.wav'
抽样率=88200
model=load_model('C:/Users/ROBERTO VILCHEZ/Desktop/Redes/mi_modelo.h5')
def read_wav_文件(x):
_,wav=wavfile.read(x)
#正常化
wav=wav.astype(np.float32)/np.iinfo(np.int16).max
返回波形
def对数谱图(wav):
频率、时间、规格=stft(wav、采样率、nperseg=400、noverlap=240、nfft=512、padded=False、boundary=None)
#对数谱图
amp=np.log(np.abs(规范)+1e-10)
返回频率、次数、安培数
阈值频率=5500
eps=1e-10
x=DIR
wav=读取wav文件(x)
L=88200
如果len(wav)>L:
i=np.random.randint(0,len(wav)-L)
wav=wav[i:(i+L)]
elif len(wav)spec=spec[freqs如果只想预测一个输入,则需要扩展测试数据(批量大小

因此,如果y的形状为(32549,1),请执行以下简单操作:

y = np.expand_dims(y, axis=0) # y shape = (1, 32, 549, 1)

Ans然后运行您的预测。

Conv2d需要4个维度(批次大小、行、列、通道)。那么32在您的情况下代表什么?单个数据样本的实际维度是什么?我的代码将音频文件转换为该音频的日志频谱图的图像,该图像的大小为(32549,1).我对其进行编辑以显示全部错误。我认为您的模型已通过具有4个维度的输入数据进行训练。现在您无法使用(32549,1)进行预测。请确保它们相同。
y = np.expand_dims(y, axis=0) # y shape = (1, 32, 549, 1)