durations_dict = list(np.load("note_durations_dict.npy",allow_pickle=True)) durations_weights = [5. for _ in range(len(durations_dict))] durations_weights[durations_dict.index("0")] = 0.1
时间: 2024-03-30 21:33:42 浏览: 59
这段代码中,首先使用`np.load()`函数读取名为"note_durations_dict.npy"的.npy文件,并将其转换为列表类型。其中,`allow_pickle=True`参数用于允许读取包含Python对象的文件。
接着,代码定义了一个名为`durations_weights`的列表,其中的元素是5.0,列表长度为`durations_dict`的长度。这里使用了列表解析的语法,即将列表中的每个元素都初始化为5.0。
最后,将`durations_weights`中名为"0"的元素的值改为0.1。这里的"durations_dict.index("0")"表示在列表`durations_dict`中查找字符串"0"的索引位置,并将该位置上的元素的值改为0.1。这个操作的目的是降低"0"这种音符的权重,让模型更加关注其他音符。
相关问题
def load_dataset(seq_len,batch_size=32): note_arr = np.load("notes_array.npy") _n_notes, _n_durations = note_arr.shape[1:] offset_arr = np.load("offsets_array.npy") _n_offsets = offset_arr.shape[1] note_arr = np.reshape(note_arr, (note_arr.shape[0], -1)) note_data = np.concatenate([note_arr, offset_arr], axis=-1) _n_embeddings = note_data.shape[-1]
这段代码定义了一个名为load_dataset()的函数,用来加载音符和节奏序列数据集。它首先从文件中加载note_arr、offset_arr数组,这两个数组分别表示音符和节奏序列的二维矩阵形式。然后,通过np.concatenate()函数将这两个数组按列合并成一个新的数组note_data,其中每个元素都表示一个音符或节奏的特征向量。接着,通过np.reshape()函数将note_arr数组转换成二维矩阵形式,方便后续处理。最后,该函数返回了经过预处理和划分后的数据集dataset,以及音符、节奏和偏移量的个数n_notes、n_durations和n_offsets,以及嵌入向量的维度n_embeddings。
x_note = [] x_offset = [] for press_time_dict in midi_list: last_offset = Fraction(0, 1) sorted_keys = sorted(press_time_dict.keys(), key=lambda t: float(Fraction(t))) for i, key in enumerate(sorted_keys): note_arr = np.zeros(shape=(len(total_keys), len(duration_keys)), dtype=np.float32) for note, duration in press_time_dict[key]: note_arr[total_keys.index(note), duration_keys.index(duration)] = 1. note_arr[np.max(note_arr, axis=-1) == 0., duration_keys.index('0')] = 1. cur_offset = Fraction(key) x_offset.append(str(cur_offset - last_offset)) last_offset = cur_offset x_note.append(note_arr) x_note = np.stack(x_note, axis=0) offset_keys = list(set(x_offset)) x_offset_idx = np.array([offset_keys.index(offset_type) for offset_type in x_offset]) x_offset = np.eye(len(offset_keys), dtype=np.int32)[x_offset_idx] x_offset = np.array(x_offset, dtype=np.float32) np.save("notes_array.npy", x_note) np.save("offsets_array.npy", x_offset) np.save("note_keys_dict.npy", total_keys) np.save("note_offsets_dict.npy", offset_keys) np.save("note_durations_dict.npy", duration_keys)
这段代码的作用是将`midi_list`列表中的所有键值对转换为神经网络的输入格式。具体来说,它将每个键值对转换为一个二维数组,其中每行表示一个音符,每列表示一个持续时间。对于每个键值对,它还将其对应的偏移量记录在`x_offset`列表中。
在代码的第一部分中,它遍历`midi_list`中的每个键值对,并按照键的顺序将其排序。然后,它遍历排序后的键,并将其转换为一个二维数组。对于每个音符,它使用`total_keys`和`duration_keys`中的索引来确定其在数组中的位置,并将该位置的值设置为1。如果一个音符在该键值对中没有出现,则该位置的值为0。对于每个键值对,它还将持续时间为0的音符设置为1,以使这些音符可以被正确地处理。
在代码的第二部分中,它使用`x_offset`列表中的偏移量将每个键值对与其之前的键值对分开。然后,它将`x_note`和`x_offset`转换为NumPy数组,并将它们保存在`.npy`文件中。最后,它将`total_keys`、`offset_keys`和`duration_keys`保存为`.npy`文件,以便在模型训练过程中使用。
阅读全文