Saya sedang belajar cara menggunakan Keras dan saya sudah cukup berhasil dengan dataset berlabel menggunakan contoh-contoh pada Chollet's Deep Learning for Python . Kumpulan data adalah ~ 1000 Time Series dengan panjang 3125 dengan 3 kelas potensial.
Saya ingin melampaui lapisan Dense dasar yang memberi saya tingkat prediksi sekitar 70% dan buku ini membahas tentang lapisan LSTM dan RNN.
Semua contoh tampaknya menggunakan kumpulan data dengan beberapa fitur untuk setiap rentang waktu dan saya berjuang untuk mengetahui bagaimana mengimplementasikan data saya sebagai hasilnya.
Jika misalnya, saya memiliki Time Series 1000x3125, bagaimana cara memasukkannya ke dalam sesuatu seperti lapisan SimpleRNN atau LSTM? Apakah saya kehilangan beberapa pengetahuan mendasar tentang apa yang dilakukan lapisan ini?
Kode saat ini:
import pandas as pd
import numpy as np
import os
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM, Dropout, SimpleRNN, Embedding, Reshape
from keras.utils import to_categorical
from keras import regularizers
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
def readData():
# Get labels from the labels.txt file
labels = pd.read_csv('labels.txt', header = None)
labels = labels.values
labels = labels-1
print('One Hot Encoding Data...')
labels = to_categorical(labels)
data = pd.read_csv('ts.txt', header = None)
return data, labels
print('Reading data...')
data, labels = readData()
print('Splitting Data')
data_train, data_test, labels_train, labels_test = train_test_split(data, labels)
print('Building Model...')
#Create model
model = Sequential()
## LSTM / RNN goes here ##
model.add(Dense(3, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
print('Training NN...')
history = model.fit(data_train, labels_train, epochs=1000, batch_size=50,
validation_split=0.25,verbose=2)
results = model.evaluate(data_test, labels_test)
predictions = model.predict(data_test)
print(predictions[0].shape)
print(np.sum(predictions[0]))
print(np.argmax(predictions[0]))
print(results)
acc = history.history['acc']
val_acc = history.history['val_acc']
epochs = range(1, len(acc) + 1)
plt.plot(epochs, acc, 'bo', label='Training acc')
plt.plot(epochs, val_acc, 'b', label='Validation acc')
plt.title('Training and Validation Accuracy')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()
plt.show()
sumber
batch_size
saat mendefinisikan model, itu akan diambil dari argumen yang sama di dalammodel.fit()
. Anda harus membentuk kembali untuk mendapatkan(3025, 100, 1000)
, yang berarti 3025 batch, masing-masing dari 100 (baris) tanda waktu dan 1000 (kolom) variabel. Menggunakannp.reshape
akan sayangnya tidak bekerja untuk ini (Anda akan mendapatkan error), karena fakta bahwa Anda akan memiliki tumpang tindih data ... bentuk akhir memiliki lebih banyak data dari input. 3025x100x1000> 3125x1000 -np.reshape
tidak suka karena ambigu. Saya sarankan hanya mengulang dataset, 1 loop = 1 sampel.