【问题标题】:Creating Numpy array or variable length arrays创建 Numpy 数组或可变长度数组
【发布时间】:2018-05-31 04:01:03
【问题描述】:

我想创建一个或多个 Numpy 数组,其中每个子数组的形状为 [128, audio_length, 1],因此我可以将此 np 数组输入 Keras.fit。但是我似乎无法弄清楚如何做到这一点,因为 np.array 只是抛出无法广播错误

def prepare_data(df, config, data_dir, bands=128):
    log_specgrams_2048 = []
    for i, fname in enumerate(df.index):
        file_path = data_dir + fname
        data, _ = librosa.core.load(file_path, sr=config.sampling_rate, res_type="kaiser_fast")
        melspec = librosa.feature.melspectrogram(data, sr=config.sampling_rate, n_mels=bands)
        logspec = librosa.core.power_to_db(melspec)  # shape would be [128, your_audio_length]
        logspec = logspec[..., np.newaxis]  # shape will be [128, your_audio_length, 1]
        log_specgrams_2048.append(normalize_data(logspec))
    return log_specgrams_2048

【问题讨论】:

  • 哪个np.array 调用会引发此错误?我在你的代码中没有看到。你确定Keras.fit 可以处理包含不同大小数组的对象 dtype 数组吗?
  • 嗨 hpaulj,当我尝试将 log_specgrams_2048 转换为 np 时,它会引发错误。我认为 Keras 可以处理不同的输入大小,因为我已经构建了一个输入为 inp = Input(shape=(None, None, 1)) 的 FCN

标签: python numpy keras


【解决方案1】:

您必须按长度对序列进行分组并多次调用 Keras.fit。

你可以这样做:

  • 分桶
  • 零填充
  • 大小为 1 的批次

【讨论】:

  • 嗨 Neabfi,谢谢你的回答。我希望你能给我一个大小为 1 的 Batch 和 Bucketing 的例子
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-20
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多