ошибки 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))

Ответы (0 шт):