Я новичок в Keras и нейронных сетях.Мне нужно реализовать и модель LSTM на моем наборе данных.
Мой набор данных состоит из следующих последовательностей:
52 53 54 55 66 67 58 59 60 68 69 70 58 59 60 68 711 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 5051 1 2 3 4 5 6 7 1 2 72 73 5 6 7 74 75 10 11 12 13 14
... У меня есть 467 файлов ".txt", которые содержат последовательности, подобные этой.Каждый файл имеет вариант номера последовательности.Имя файла - это метка для всех последовательностей (например, для имени файла «100026» метка для каждой отдельной последовательности - 100026).
Итак, я реализовал этот код, который сначала добавляет последовательности в самую длинную последовательность,Мне сказали, что я должен использовать маскировку после заполнения.Я не мог понять это Так изменилось много частей, показанных в комментариях, но пока не повезло.
import numpy as np
import glob
import os
#import numpy.ma as ma
#from keras import layers
from keras.preprocessing.sequence import pad_sequences
from keras.layers import LSTM
from keras.models import Sequential
from keras.layers import Dense, Embedding, Masking
from keras.utils import np_utils
from keras.utils import to_categorical
nb_classes =467
def load_data():
path = r'I:\NEDA\GNOME\Converted to ID'
max_len= -1
data =[]
data_labels =[]
for filename in os.listdir(path):
lbl = 0 # to convert the labels to integers starting from 0
with open(os.path.join(path, filename)) as f:
lbl+=1
for line in f:
data.append(line.split())
data_labels.append(lbl) #filename.split(".")[0]
if max_len < len(line.split()):
max_len = len(line.split())
#print(filename.split(".")[0])
percent = int(len(data)*0.7) # 70% for training and 30% for testing
data = np.array(data)
nb_features= len(np.unique(data)) # extracting number of available features( functioons)
#*data = pad_sequences(data, maxlen=max_len) ### np.expand_dim
#data_labels=np.array(data_labels)
#print(data.shape)
train_data = data[0:percent]
train_labels = data_labels[0:percent]
test_data = data[percent:]
test_labels = data_labels[percent:]
#print(train_set.shape) # + " " + train_labels.shape)
return (np.array(train_data), np.array(train_labels), np.array(test_data), np.array(test_labels) , nb_features , max_len)
train_data, train_labels, test_data, test_labels, nb_features, max_len = load_data()
train_data = pad_sequences(train_data, maxlen = max_len) # ADDED
test_data = pad_sequences(test_data, maxlen= max_len) # added
#*train_data = np.reshape(train_data, (train_data.shape[0], train_data.shape[1], 1))
#*test_data = np.reshape(test_data, (test_data.shape[0], test_data.shape[1], 1))
train_labels = to_categorical(train_labels, nb_classes )# ADDED
test_labels = to_categorical(test_labels, nb_classes )# ADDED
model = Sequential()
model.add(Embedding(nb_features, 128))
model.add(LSTM(128, dropout =0.2, recurrent_dropout =0.2))
model.add(Dense(1, activation = 'sgd'))
model.add(Dense(nb_classes, activation='softmax'))
'''model.add(Masking(mask_value=0, input_shape=(max_len, nb_features)))#train_datalen(train_data)
model.add(LSTM(12, return_sequences=True, kernel_initializer="one")) #train_data#train_data.values.shape[1]#input_shape=(max_len,1)
model.add(Dense(1, activation='sigmoid', kernel_initializer="one"))
#model.add(Dense(nb_classes, activation='softmax'))
#model.compile(loss='binary_crossentropy', optimizer='sgd')
'''
model.summary()
#RMSprop() 'sparse_categorical_crossentropy'
model.compile(loss='categorical_crossentropy',
optimizer= 'adam',
metrics=['accuracy'])
# fit model
model.fit(train_data, train_labels, epochs=2, batch_size=16, validation_data=(test_data, test_labels)) #validation_data=(x_test, y_test)
score = model.evaluate(test_data, test_labels,batch_size=16 ) # verbose=0
print('Test score:', score[0])
print('Test accuracy:', score[1])
Этот код работает близко к последним последовательностям, но перестает отображать эту ошибку:
indexes [2,219] = 5849 отсутствует в [0, 5849)
[[Узел: embedding_1 / GatherV2 = GatherV2 [Taxis = DT_INT32, Tindices = DT_INT32, Tparams = DT_FLOAT, _device = "/ job: localhost / replica: 0 / task: 0 / device: CPU: 0"] (embedding_1 /embeddings / read, embedding_1 / Cast, lstm_1 / TensorArrayUnstack / range / start)]]
Вызывается операцией 'embedding_1 / GatherV2', определенной в:
File "C: \ Program Files ((x86) \ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ Extensions \ Microsoft \ Python Tools для Visual Studio \ 2.2 \ visualstudio_py_launcher.py ", строка 78, в
vspd.debug(filename, port_num, debug_id, debug_options, run_as)
Файл" C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ Extensions \ Microsoft \ Python Tools для Visual Studio \ 2.2 \ visualstudio_py_debugger.py ", строка 2483, в отладочном файле
exec_file(file, globals_obj)
Файл" C: \ Program Files(x86) \ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ Extensions \ Microsoft \ Инструменты Python для Visual Studio \ 2.2 \ visualstudio_py_util.py ", строка 111, в exec_file
exec_code(code, file, global_variables)
Файл" C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ Extensions \ Microsoft \ Python Tools for Visual Studio \ 2.2\ visualstudio_py_util.py ", строка 87, в exec_code
exec(code_obj, global_variables)
Файл" C: \ Users \ umroot \ Documents \ Visual Studio 2015 \ Projects \ deepLearning \ deepLearning \ deepLearning.py ", строка 58, в
model.add(Embedding(nb_features, 128))
Файл "C: \ Users \ umroot \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ keras \ models.py", строка 497, в добавлении
layer(x)
Файл "C: \ Users \ umroot \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ keras \ engine \ topology.py", строка 619, в вызов
output = self.call(inputs, **kwargs)
Файл "C: \ Users \ umroot \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ keras \ layer \ embeddings.py", строка 138, в вызове
out = K.gather(self.embeddings, inputs)
Файл "C: \ Users \ umroot \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ keras \ backend \ tenorflow_backend.py", строка 1215, в сборке
return tf.gather(reference, indices)
Файл "C: \ Users \ umroot \ AppDat"a \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ tenorflow \ python \ ops \ array_ops.py ", строка 2736, в сборе
return gen_array_ops.gather_v2(params, indices, axis, name=name)
Файл" C: \ Users \ umroot \ "AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ tenorflow \ python \ ops \ gen_array_ops.py ", строка 3668, в collect_v2
"GatherV2", params=params, indices=indices, axis=axis, name=name)
Файл" C: \ Users \ umroot \ "AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ tenorflow \ python \ framework \ op_def_library.py ", строка 787, в _apply_op_helper
op_def=op_def)
Файл" C: \ Users \ umroot \ "AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ tenorflow \ python \ framework \ ops.py ", строка 3392, в create_op
op_def=op_def)
Файл" C: \ Users \ umroot \ "AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ tenorflow \ python \ framework \ ops.py ", строка 1718, в init
self._traceback = self._graph._extract_stack() # pylint: disable=protected-access
InvalidArgumentError (см.выше для отслеживания): индексы [2,219] = 5849 не в [0, 5849)
[[Узел: embedding_1 / GatherV2 = GatherV2 [Такси = DT_INT32, Tindices = DT_INT32, Tparams = DT_FLOAT, _device = "/ job: localhost / replica: 0 / task: 0 / device: CPU: 0"] (embedding_1/ embeddings / read, embedding_1 / Cast, lstm_1 / TensorArrayUnstack / range / start)]]