/
Durbolay
/
Lab2
Обзор
Документация
Войти
/
Durbolay
/
Lab2
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Lab2.py
148 строк
5 KB
Durbolay
create Lab2.py
17 ноя 2025, 18:21
17 ноя 2025, 18:21
c09c7d9
Код
Авторство
О чём код?
# Лабораторная работа №2: Прогнозирование временных рядов и классификация текстов import numpy as np import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import SimpleRNN, LSTM, GRU, Dense, Embedding from sklearn.preprocessing import MinMaxScaler from sklearn.metrics import mean_squared_error import matplotlib.pyplot as plt print("=== ЧАСТЬ 1: ПРОГНОЗИРОВАНИЕ ВРЕМЕННЫХ РЯДОВ ===") def generate_time_series(n_steps): time = np.linspace(0, 1, n_steps) series = 0.5 * np.sin((time) * (10 + 10)) + 0.2 * np.sin((time) * (20 + 20)) + 0.1 * (np.random.rand(n_steps) - 0.5) return series n_steps = 1000 series = generate_time_series(n_steps) plt.figure(figsize=(12, 4)) plt.plot(series) plt.title('Сгенерированный временной ряд') plt.show() split_time = 800 train_series = series[:split_time] test_series = series[split_time:] scaler = MinMaxScaler(feature_range=(0, 1)) train_scaled = scaler.fit_transform(train_series.reshape(-1, 1)) test_scaled = scaler.transform(test_series.reshape(-1, 1)) def create_dataset(data, window_size): X, y = [], [] for i in range(window_size, len(data)): X.append(data[i-window_size:i, 0]) y.append(data[i, 0]) return np.array(X), np.array(y) window_size = 20 X_train, y_train = create_dataset(train_scaled, window_size) X_test, y_test = create_dataset(test_scaled, window_size) X_train = X_train.reshape((X_train.shape[0], X_train.shape[1], 1)) X_test = X_test.reshape((X_test.shape[0], X_test.shape[1], 1)) def build_model(model_type, window_size): model = Sequential() if model_type == 'SimpleRNN': model.add(SimpleRNN(50, activation='tanh', input_shape=(window_size, 1))) elif model_type == 'LSTM': model.add(LSTM(50, activation='tanh', input_shape=(window_size, 1))) elif model_type == 'GRU': model.add(GRU(50, activation='tanh', input_shape=(window_size, 1))) model.add(Dense(1)) model.compile(optimizer='adam', loss='mse') return model model_types = ['SimpleRNN', 'LSTM', 'GRU'] histories = {} models = {} for model_type in model_types: print(f"Обучение модели {model_type}...") model = build_model(model_type, window_size) history = model.fit(X_train, y_train, epochs=50, batch_size=32, validation_data=(X_test, y_test), verbose=0) models[model_type] = model histories[model_type] = history plt.figure(figsize=(12, 6)) for model_type in model_types: plt.plot(histories[model_type].history['val_loss'], label=f'{model_type} Val Loss') plt.title('Сравнение потерь на валидации (MSE)') plt.ylabel('MSE') plt.xlabel('Эпоха') plt.legend() plt.show() plt.figure(figsize=(15, 10)) for i, model_type in enumerate(model_types): y_pred = models[model_type].predict(X_test) y_test_inv = scaler.inverse_transform(y_test.reshape(-1, 1)) y_pred_inv = scaler.inverse_transform(y_pred) mse = mean_squared_error(y_test_inv, y_pred_inv) plt.subplot(3, 1, i+1) plt.plot(y_test_inv, label='Истинные значения', linewidth=2) plt.plot(y_pred_inv, label='Предсказания', linewidth=1) plt.title(f'{model_type} (MSE: {mse:.4f})') plt.legend() plt.tight_layout() plt.show() print("=== ЧАСТЬ 2: КЛАССИФИКАЦИЯ ТЕКСТОВ ===") from tensorflow.keras.datasets import imdb from tensorflow.keras.preprocessing.sequence import pad_sequences vocab_size = 10000 max_len = 200 (X_train, y_train), (X_test, y_test) = imdb.load_data(num_words=vocab_size) X_train = pad_sequences(X_train, maxlen=max_len) X_test = pad_sequences(X_test, maxlen=max_len) def build_text_model(model_type): model = Sequential() model.add(Embedding(vocab_size, 32)) if model_type == 'LSTM': model.add(LSTM(32)) elif model_type == 'GRU': model.add(GRU(32)) model.add(Dense(1, activation='sigmoid')) model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) return model print("Обучение LSTM модели...") model_lstm = build_text_model('LSTM') history_lstm = model_lstm.fit(X_train, y_train, epochs=5, batch_size=128, validation_split=0.2, verbose=1) print("Обучение GRU модели...") model_gru = build_text_model('GRU') history_gru = model_gru.fit(X_train, y_train, epochs=5, batch_size=128, validation_split=0.2, verbose=1) lstm_test_loss, lstm_test_acc = model_lstm.evaluate(X_test, y_test, verbose=0) gru_test_loss, gru_test_acc = model_gru.evaluate(X_test, y_test, verbose=0) print(f"LSTM Точность на тесте: {lstm_test_acc:.4f}") print(f"GRU Точность на тесте: {gru_test_acc:.4f}") plt.figure(figsize=(12, 5)) plt.subplot(1, 2, 1) plt.plot(history_lstm.history['val_accuracy'], label='LSTM Val Accuracy') plt.plot(history_gru.history['val_accuracy'], label='GRU Val Accuracy') plt.title('Сравнение точности на валидации') plt.ylabel('Accuracy') plt.xlabel('Эпоха') plt.legend() plt.subplot(1, 2, 2) plt.plot(history_lstm.history['val_loss'], label='LSTM Val Loss') plt.plot(history_gru.history['val_loss'], label='GRU Val Loss') plt.title('Сравнение потерь на валидации') plt.ylabel('Loss') plt.xlabel('Эпоха') plt.legend() plt.tight_layout() plt.show()