ошибки python в pycharm. Как исправить
Ошибка:
C:\Users\User\PycharmProjects\OtherPythonProject\venv\Scripts\python.exe C:/Users/User/PycharmProjects/OtherPythonProject/main.py
Traceback (most recent call last):
File "C:\Users\User\PycharmProjects\OtherPythonProject\main.py", line 12, in <module>
with open(data_dir / 'data.pickle', 'rb') as f:
FileNotFoundError: [Errno 2] No such file or directory: 'demo_traffic_jam_prediction\\data.pickle'
Process finished with exit code 1
Код:
# импорт библиотеки pandas
import pandas as pd
# импорт библиотеки pickle
import pickle
# указываем рабочую директорию
from pathlib import Path
data_dir: Path = Path('demo_traffic_jam_prediction')
# записываем всевозможн=ные события и все даннные в разные переменные
with open(data_dir / 'data.pickle', 'rb') as f:
[event_dict, df] = pickle.load(f)
# вывод на консоль для проверки
print(event_dict)
print(df)
# индекс наибольшей последовательности
max_len_event_id = df.events.apply(len).idxmax()
print(max_len_event_id)
# самая длинная последовательность
max_len_event = df.iloc[max_len_event_id]
print(max_len_event.events)
# сколько данных в самой длинной последовательности
maxlen = len(max_len_event.events)
print(maxlen)
# обратный список всех событий
reversed_dict = {}
for k, v in event_dict.items():
reversed_dict[v] = k
print(reversed_dict)
# функция, которое преобразует список событий и веррнёт список чисел
def map_event_list_to_idxs(event_list):
list_idxs = []
for event in (event_list):
idx = reversed_dict[event]
list_idxs.append(idx)
return list_idxs
# проверка функции
print(map_event_list_to_idxs(max_len_event.events))
# импорт библиотек numpy и keras
import numpy as np
from tensorflow.keras.preprocessing.sequence import pad_sequences
# сколько рахных событий у нас есть
print(len(event_dict))
# преобразуем все события в числа
print(df.events.apply(map_event_list_to_idxs))
# отобразим первые 5 последовательностей
sequences = df.events.apply(map_event_list_to_idxs).tolist()
print(sequences[:5])
# чтобы применить модель последовательности к данным, нужны последовательности с одинаковыми длинами
data = pad_sequences(sequences, maxlen=maxlen)
print(data)
# сохрянем label в массив labels
labels = np.array(df.label)
print(labels)
np.random.seed(12)
# перемешаем данные, т.е. события
indices = np.arange(data.shape[0])
np.random.shuffle(indices)
data = data[indices]
labels = labels[indices]
# Обучающий набор будет содкржать 80% данных, а остальные 20% войдут в набор для проверки.
training_samples = int(len(indices) * .8)
validation_samples = len(indices) - training_samples
# разделяем данные на наборы обучения и проверка, а также и label
X_train = data[:training_samples]
y_train = labels[:training_samples]
X_valid = data[training_samples: training_samples + validation_samples]
y_valid = labels[training_samples: training_samples + validation_samples]
print(X_train)
# поскольку мы заполнили последователььности 0 в качесвте значения заполнения, теперь у нас есть 33, а не 32 типа событий.
num_events = len(event_dict) + 1
print(num_events)
# если мы просто поместим число в модель класифакации, она будет рассматривать число как непрерывное значение. Однако это не так. Таким образом, мы позволим числам пройти через слой встраивания и преобразовать каждое число (представляющее настоящее тип событий) в вектор. Каждый вектор будет содержать 20 скаляров.
embedding_dim = 20
# Исходная матрица вложения будет сгенерирована случайным образом
embedding_matrix = np.random.rand(num_events, embedding_dim)
from keras.models import Sequential
from keras.layers import Embedding, Dense, LSTM
units = 32
model = Sequential()
model.add(Embedding(num_events, embedding_dim))
model.add(LSTM(units))
model.add(Dense(1, activation='sigmoid'))
# На данный момент просто загружаем начальную матрицу встраивания, сгенерирована случайным образом, и не позволяем процессу обучения изменят веса в слое встраивагния
model.layers[0].set_weights([embedding_matrix])
model.layers[0].trainable = False
# обучаем модель и сохраняем его в файл h5
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['acc'])
history = model.fit(X_train, y_train,
epochs=50,
validation_data=(X_valid, y_valid))
model.save("mymodel_embedding_untrainable.h5")
# импортируем модуль библиотеки matplotlib и нарисуем график кривых точности и потерь
import matplotlib.pyplot as plt
acc = history.history['acc']
val_acc = history.history['val_acc']
loss = history.history['loss']
val_loss = history.history['val_loss']
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.legend()
plt.figure()
plt.plot(epochs, loss, 'bo', label='Training loss')
plt.plot(epochs, val_loss, 'b', label='Validation loss')
plt.title('Training and validation loss')
plt.legend()
plt.show()
# мы использовали случайно использованную матрицу внедрения, которая оставалась стаатичной во время фазы обучения. Это может привести к неприятностям. Итак, следующим шагом мы можем провести эксперимент, чтобы позволить обучить и настроить слой (встраивания)Embedding.
from keras.models import Sequential
from keras.layers import Embedding, Dense, LSTM
units = 32
model = Sequential()
model.add(Embedding(num_events, embedding_dim))
model.add(LSTM(units))
model.add(Dense(1, activation='sigmoid'))
model.layers[0].set_weights([embedding_matrix])
model.layers[0].trainable = True
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['acc'])
history = model.fit(X_train, y_train,
epochs=50,
batch_size=32,
validation_data=(X_valid, y_valid))
model.save("mymodel_embedding_trainable.h5")
import matplotlib.pyplot as plt
acc = history.history['acc']
val_acc = history.history['val_acc']
loss = history.history['loss']
val_loss = history.history['val_loss']
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.legend()
plt.figure()
plt.plot(epochs, loss, 'bo', label='Training loss')
plt.plot(epochs, val_loss, 'b', label='Validation loss')
plt.title('Training and validation loss')
plt.legend()
plt.show()
from keras.models import Sequential
from keras.layers import Embedding, Dense, LSTM
units = 32
model = Sequential()
model.add(Embedding(num_events, embedding_dim))
model.add(LSTM(units, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(1, activation='sigmoid'))
model.layers[0].set_weights([embedding_matrix])
model.layers[0].trainable = True
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['acc'])
history = model.fit(X_train, y_train,
epochs=50,
batch_size=32,
validation_data=(X_valid, y_valid))
model.save("mymodel_embedding_trainable_with_dropout.h5")
import matplotlib.pyplot as plt
acc = history.history['acc']
val_acc = history.history['val_acc']
loss = history.history['loss']
val_loss = history.history['val_loss']
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.legend()
plt.figure()
plt.plot(epochs, loss, 'bo', label='Training loss')
plt.plot(epochs, val_loss, 'b', label='Validation loss')
plt.title('Training and validation loss')
plt.legend()
plt.show()
predictions = model.predict_classes(X_valid)
for i in range(len(X_valid)):
print('%s => %d (expected %d)' % (X_valid[i].tolist(), predictions[i], y_valid[i]))
check = []
for i in range(len(X_valid)):
check.append(1 if predictions[i] == y_valid[i] else 0)
print('Точность прогноза в процентах: ', sum(check)/len(check))