Привет, я пытался заставить мой код работать для этого некоторое время. Каждый раз, когда я запускаю сеть LSTM. Я получаю ошибки. Я попытался изменить выходной массив, добавив плоский слой и изменить входной массив. Кажется, ничего не работает. Пожалуйста помоги.
Генерация набора данных ...
#This generates a dataset to test the LSTM network
from random import seed, sample, randint
from random import sample
def genDataMatrix(n):
labels = ['bpsk', 'qpsk', 'gmsk', 'qam', 'cpm']
arr_data = []
arr_labels = []
for i in range (1, n):
a = []
for i in range (1, 10):
a.append(randint(0, 100))
arr_data.append(a)
arr_labels.append(labels[randint(0,4)])
#print(arr_labels)
return arr_data, arr_labels
Этот раздел используется для моделирования и запуска LSTM Network Importing необходимые библиотеки.
#Imports necessary libraries for the neural network code
import tensorflow as tf
import keras
from keras.layers.core import Dense, Activation, Dropout
from keras.preprocessing import sequence
from keras.models import Sequential
from keras.layers import Dense, Embedding, Flatten, LSTM
from keras import optimizers
#LSTM Class
Это мой класс LSTM:
class NN_LSTM:
def __init__ (self):
""""""
#This function splits the array into three sperate arrays
def genTrainTest(self, arr):
sep = int(arr.shape[0]/5)
return np.split(arr, [sep*3, sep*4], axis = 0)
Далее я настроил метки для быстрого кодирования. (Обратите внимание, что он все еще относится к классу NN_LSTM)
#This code converts the text category labels to binary arrays via one hot encoding
def oneHotEncode(self, data):
#Code from
#https://machinelearningmastery.com/how-to-one-hot-encode-sequence-data-in-python/
from numpy import array
from numpy import argmax
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import OneHotEncoder
# define example
#data = ['cold', 'cold', 'warm', 'cold', 'hot', 'hot', 'warm', 'cold', 'warm', 'hot']
values = array(data)
#print(values)
# integer encode
label_encoder = LabelEncoder()
integer_encoded = label_encoder.fit_transform(values)
#print(integer_encoded)
# binary encode
onehot_encoder = OneHotEncoder(sparse=False)
integer_encoded = integer_encoded.reshape(len(integer_encoded), 1)
onehot_encoded = onehot_encoder.fit_transform(integer_encoded)
#print(onehot_encoded)
# invert first example
inverted = label_encoder.inverse_transform([argmax(onehot_encoded[0, :])])
#print("Text Value: ", inverted)
return onehot_encoded
Основная функция для сети LSTM. Я считаю, что проблема заключается в следующем:
def runLSTM_NN(self, x, y):
""""""
#Encondes labels as binary vectors for processing by the neural network
y = self.oneHotEncode(y)
#seperate train, test, and validation data
train_x, test_x, validate_x = self.genTrainTest(np.array(x))
train_y, test_y, validate_y = self.genTrainTest(np.array(y))
#train_y_bin = keras.utils.to_categorical(train_y, 10)
train_x = np.asarray(train_x)
train_y = np.asarray(train_y)
test_x = np.asarray(test_x)
test_y = np.asarray(test_y)
validate_x = np.asarray(validate_x)
validate_y = np.asarray(validate_y)
train_x_reshape = train_x.reshape(train_x.shape[0], train_x.shape[1], 1)
train_y_reshape = train_y.reshape(train_y.shape[0], train_y.shape[1], 1)
model = Sequential()
model.add(LSTM(1, return_sequences=True, input_shape=(train_x.shape[1], 1)))
model.add(Dropout(0.2))
#model.add(Flatten())
#Add the layer for the output information.
#The first number refers to the number of neurons or output catogories.
model.add(Dense(3, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
print(model.summary())
model.fit(train_x_reshape, train_y_reshape, epochs=3, batch_size=64, verbose = 0)
model.fit()
""""""
Наконец, в конце кода я запускаю информацию:
def main():
#Inputs information into global variables for later usage
x, y = genDataMatrix(100)
#Sets up and runs the LSTM Neural Netwwok class to be run
L = NN_LSTM()
L.__init__
L.runLSTM_NN(x, y)
main()