5-1 背景和知识点简介
Magenta
google基于TensorFlow做的和音乐 艺术相关的项目
格式
midi:用数字表示音
image.png
mp3
技术
RNN:每一个输出和前面输出建立联系,很好处理序列化数据
LSTM
5-3 什么是midi文件
midi:二进制文件 基本结构:文件头+数据描述 很小一般十几kB MP3一般十几MB
![image.png](https://img.haomeiwen.com/i8223243/8cfe16dbecd
编写转换midi到mp3的方法
用timidity生成MP3文件
cp命令是复制
5.6Python音乐库music21的使用和测试方法
类:note&chord
ll 其实不是个命令 是ls -l的别名 会显示出隐式文件
from ...import convert, instrument
convert转stream流类型 ,instructment会获取乐器部分 从stream中
if parts: 如果非零
那么递归获取
如果没有乐器部分,就是纯音符组成
5.7编写整个神经网络
mv命令:移动文件或者给文件改名
RNN-LSTM循环神经网络
Sequential 类 线性堆叠起来的层级模型 序列 添加不同的神经网络的层
model = Sequential()
model.add(Dense(32, input_dim=500)) // 全连接层
model.add(Dense)
层在tf.keras.layers里面
tf版本不一样,对应用法可能不一样
函数的参数列表 (xx=None)是个可选参数,不用的时候默认为none
image.png
丢弃层:只用了70%的神经元 防止过拟合
如果有多个LSTM堆叠起来,第一个层需要指定形状,
model.add(tf.keras.layers.LSTM(
512,#LSTM层神经元的数目是512,也是输出维度
input_shape=(inputs.shape[1], inputs.shape[2]), # 输入数据形状为shape[2]个时间长度,每一个时间点下样本数据的特征值维度是shape[1]
return_sequences=True # 只有最后一层LSTM不用设置))
丢弃层
...Dropout(0.3)
#丢弃30%神经元
全连接层
Dense(256)
Dense(num_pitch)
激活层
softmax属于激活层,用softmax函数去计算
Activation('Softmax')
对model进行配置
model.compile(loss="categorical_crossentropy", optimizer=rmsprop)
交叉熵计算误差,使用对循环神经网络比较优秀的rmsprop优化器
保存参数
model.load_weights(weights_file)
5-8编写从训练文件获取音符的方法
gedit是个文本编辑器
pickle;glob是读文件的库
mkdir 创建文件夹
glob:匹配所有符合条件的文件,并以List的形式返回
for file in glob.glob("music_midi/*.mid"):
创建一个数组notes[]
for elements in notes_to_parse:
#Note类型就取Pitch
if isinstance(element, note.Note):
notes.append(str(element))
elif isinstance(element, chord.Chord):
#转换为整数 ,用·分割,这个是midi然后转成音符 比如4.15.7
notes.append('.' . join(str(n) for n in element.normalOrder))
#将数据写入 data/notes 文件
with open('data/notes', wb) as filepath:
pickle.dump(notes, filepath)
5-9 编写从预测数据来生成音乐的方法
def create_music(prediction):
网友评论