# -*- coding:utf-8 -*-
#Author: shenying
#Date: 18-7-20 下午2:50
from __future__ import print_function
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
import IPython
import sys
from music21 import *
import numpy as np
from grammar import *
from qa import *
from preprocess import *
from music_utils import *
from data_utils import *
from keras.models import load_model,Model
from keras.layers import Dense,Activation,Dropout,Input,LSTM,Reshape,Lambda,RepeatVector
from keras.initializers import glorot_uniform
from keras.utils import to_categorical
from keras.optimizers import Adam
from keras import backend as K
def djmodel(Tx,n_a,n_values):
X=Input(shape=(Tx,n_values))
a0=Input(shape=(n_a,),name='a0')
c0=Input(shape=(n_a,),name='c0')
a=a0
c=c0
outputs=[]
for t in range(Tx):
x=Lambda(lambda x:X[:,t,:])(X)
x=reshapor(x)
a,_,c=LSTM_cell(x,initial_state=[a,c])
out=densor(a)
outputs.append(out)
model=Model([X,a0,c0],outputs)
return model
def music_inference_model(LSTM_cell,densor,n_values=78,n_a=64,Ty=100):
x0=Input(shape=(1,n_values))
a0=Input(shape=(n_a,),name='a0')
c0=Input(shape=(n_a,),name='c0')
a=a0
c=c0
x=x0
outputs=[]
for t in range(Ty):
a,_,c=LSTM_cell(x,initial_state=[a,c])
out=densor(a)
outputs.append(out)
x=Lambda(one_hot)(out)
inferentce_model=Model([x0,a0,c0],outputs)
return inferentce_model
def predict_and_sample(inference_model,x_initializer=x_initializer,a_initilizer=a_initializer,
c_initializer=c_initializer):
pred=inference_model.predict([x_initializer,a_initializer,c_initializer])
indices=np.argmax(pred,axis=-1)
result=to_categorical(indices,num_classes=78)
return result,indices
if __name__=="__main__":
X,Y,n_values,indices_values=load_music_utils()
# print('shape of X:', X.shape)
# print('number of training examples:', X.shape[0])
# print('Tx (length of sequence):', X.shape[1])
# print('total # of unique values:', n_values)
# print('Shape of Y:', Y.shape)
n_a=64
reshapor=Reshape((1,78)) # 2.b
LSTM_cell=LSTM(n_a,return_state=True) # 2.c
densor=Dense(n_values,activation='softmax') # 2.d
model=djmodel(Tx=30,n_a=64,n_values=78)
# model.summary()
opt=Adam(lr=0.01,beta_1=0.9,beta_2=0.999,decay=0.01)
model.compile(optimizer=opt,loss='categorical_crossentropy',metrics=['accuracy'])
m=60
a0=np.zeros((m,n_a))
c0=np.zeros((m,n_a))
model.fit([X,a0,c0],list(Y),epochs=100)
inference_model=music_inference_model(LSTM_cell,densor,n_values=78,n_a=64,Ty=100)
x_initializer=np.zeros((1,1,78))
a_initializer=np.zeros((1,n_a))
c_initializer=np.zeros((1,n_a))
results, indices = predict_and_sample(inference_model, x_initializer, a_initializer, c_initializer)
print("np.argmax(results[12]) =", np.argmax(results[12]))
print("np.argmax(results[17]) =", np.argmax(results[17]))
print("list(indices[12:18]) =", list(indices[12:18]))
out_stream = generate_music(inference_model)
吴恩达 第5课 week1 Improvise a Jazz Solo with an LSTM Network - v1
猜你喜欢
转载自blog.csdn.net/qq_31119155/article/details/81162808
今日推荐
周排行