Advertisement
Guest User

Untitled

a guest
Jan 26th, 2020
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.74 KB | None | 0 0
  1. from pandas import read_csv
  2. from numpy import array
  3. from numpy import argmax
  4. from pandas import concat
  5. from pandas import DataFrame
  6. from keras.models import Sequential
  7. from keras.layers import LSTM
  8. from keras.layers import Dense
  9.  
  10. # generate a sequence of random numbers in [0, 99]
  11. pitches = read_csv('goro.csv', squeeze=True)
  12.  
  13. print(pitches)
  14.  
  15. # one hot encode sequence
  16. def one_hot_encode(sequence, n_unique=1000):
  17.     encoding = list()
  18.     for value in sequence:
  19.         vector = [0 for _ in range(n_unique)]
  20.         vector[value] = 1
  21.         encoding.append(vector)
  22.     return array(encoding)
  23.  
  24. # decode a one hot encoded string
  25. def one_hot_decode(encoded_seq):
  26.     return [argmax(vector) for vector in encoded_seq]
  27.  
  28. # generate data for the lstm
  29. def generate_data():
  30.     # generate sequence
  31.     sequence = pitches()
  32.     # one hot encode
  33.     encoded = one_hot_encode(sequence)
  34.     # create lag inputs
  35.     df = DataFrame(encoded)
  36.     df = concat([df.shift(4), df.shift(3), df.shift(2), df.shift(1), df], axis=1)
  37.     # remove non-viable rows
  38.     values = df.values
  39.     values = values[5:,:]
  40.     # convert to 3d for input
  41.     X = values.reshape(len(values), 5, 1000)
  42.     # drop last value from y
  43.     y = encoded[4:-1,:]
  44.     return X, y
  45.  
  46. # define model
  47. model = Sequential()
  48. model.add(LSTM(50, batch_input_shape=(5, 5, 1000), stateful=True))
  49. model.add(Dense(100, activation='softmax'))
  50. model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
  51. # fit model
  52. for i in range(2000):
  53.     X, y = generate_data()
  54.     model.fit(X, y, epochs=1, batch_size=5, verbose=2, shuffle=False)
  55.     model.reset_states()
  56. # evaluate model on new data
  57. X, y = generate_data()
  58. yhat = model.predict(X, batch_size=5)
  59. print('Expected:  %s' % one_hot_decode(y))
  60. print('Predicted: %s' % one_hot_decode(yhat))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement