Update Assignment2.ipynb
3 task not done.
This commit is contained in:
@@ -2,13 +2,21 @@
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 57,
|
||||
"execution_count": 79,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Данные успешно загружены.\n",
|
||||
"Выбраны релевантные столбцы для Дании.\n",
|
||||
"Пропущенные значения обработаны (удалены строки с NaN).\n",
|
||||
"Сформированы массивы 24x3 (часы x признаки).\n",
|
||||
"Создан DataFrame с массивами и метками сезонов.\n",
|
||||
"Выполнено кодирование меток.\n",
|
||||
"Данные разделены на обучающий, валидационный и тестовый наборы.\n",
|
||||
"Выполнено масштабирование данных.\n",
|
||||
"Данные успешно сохранены в processed_data.npz\n"
|
||||
]
|
||||
},
|
||||
@@ -37,6 +45,7 @@
|
||||
" # 1. Загрузка данных\n",
|
||||
" try:\n",
|
||||
" data = pd.read_csv(\"dataset/opsd_raw.csv\", parse_dates=[\"utc_timestamp\"])\n",
|
||||
" print(\"Данные успешно загружены.\")\n",
|
||||
" except FileNotFoundError:\n",
|
||||
" print(\"Ошибка: Файл dataset/opsd_raw.csv не найден.\")\n",
|
||||
" return\n",
|
||||
@@ -57,10 +66,12 @@
|
||||
" \n",
|
||||
" data = data[cols].copy()\n",
|
||||
" data.columns = [\"timestamp\", \"load\", \"wind\", \"solar\"]\n",
|
||||
" print(\"Выбраны релевантные столбцы для Дании.\")\n",
|
||||
" \n",
|
||||
" # 3. Обработка пропущенных значений:\n",
|
||||
" # Удаляем строки, где есть хоть одно пропущенное значение\n",
|
||||
" data.dropna(inplace=True)\n",
|
||||
" print(\"Пропущенные значения обработаны (удалены строки с NaN).\")\n",
|
||||
"\n",
|
||||
" # 4. Формирование массивов 24x3 (часы × признаки)\n",
|
||||
" data.set_index(\"timestamp\", inplace=True)\n",
|
||||
@@ -71,6 +82,7 @@
|
||||
" if len(x) == 24 else None\n",
|
||||
" )\n",
|
||||
" daily_data = daily_data.dropna()\n",
|
||||
" print(\"Сформированы массивы 24x3 (часы x признаки).\")\n",
|
||||
" \n",
|
||||
" # Преобразуем индексы в формат datetime для дальнейшей работы\n",
|
||||
" daily_data.index = pd.to_datetime(daily_data.index)\n",
|
||||
@@ -81,6 +93,7 @@
|
||||
" \"data\": daily_data.values,\n",
|
||||
" \"season\": daily_data.index.map(lambda x: get_season(x.month))\n",
|
||||
" })\n",
|
||||
" print(\"Создан DataFrame с массивами и метками сезонов.\")\n",
|
||||
" \n",
|
||||
" # 6. Разделение данных\n",
|
||||
" X = np.stack(df[\"data\"].values)\n",
|
||||
@@ -94,6 +107,7 @@
|
||||
" # Encode labels\n",
|
||||
" label_encoder = LabelEncoder()\n",
|
||||
" y_encoded = label_encoder.fit_transform(y)\n",
|
||||
" print(\"Выполнено кодирование меток.\")\n",
|
||||
" \n",
|
||||
" X_train, X_temp, y_train, y_temp = train_test_split(\n",
|
||||
" X, y_encoded, test_size=0.3, stratify=y_encoded, random_state=42\n",
|
||||
@@ -101,6 +115,7 @@
|
||||
" X_val, X_test, y_val, y_test = train_test_split(\n",
|
||||
" X_temp, y_temp, test_size=0.5, stratify=y_temp, random_state=42\n",
|
||||
" )\n",
|
||||
" print(\"Данные разделены на обучающий, валидационный и тестовый наборы.\")\n",
|
||||
" \n",
|
||||
" # 7. Масштабирование\n",
|
||||
" scaler = StandardScaler()\n",
|
||||
@@ -122,6 +137,7 @@
|
||||
" return\n",
|
||||
" X_test_reshaped = X_test.reshape(-1, 3)\n",
|
||||
" X_test_scaled = scaler.transform(X_test_reshaped).reshape(X_test.shape)\n",
|
||||
" print(\"Выполнено масштабирование данных.\")\n",
|
||||
" \n",
|
||||
" # 8. Сохранение данных\n",
|
||||
" try:\n",
|
||||
@@ -153,8 +169,9 @@
|
||||
" for season in [\"winter\", \"spring\", \"summer\", \"autumn\"]:\n",
|
||||
" try:\n",
|
||||
" # Get the first day's data for the given season\n",
|
||||
" season_encoded = df[df[\"season\"] == season].iloc[0][\"data\"]\n",
|
||||
" plt.plot(season_encoded[0], label=f\"{season} load\") # Plot the 'load' data\n",
|
||||
" season_data = df[df[\"season\"] == season].iloc[0][\"data\"]\n",
|
||||
" # Plotting only the 'load' data\n",
|
||||
" plt.plot(season_data[0], label=f\"{season} load\")\n",
|
||||
" except IndexError:\n",
|
||||
" print(f\"Предупреждение: Нет данных для сезона {season} для построения графика.\")\n",
|
||||
" plt.title(\"Суточные профили потребления энергии по сезонам\")\n",
|
||||
@@ -171,7 +188,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 58,
|
||||
"execution_count": 80,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
@@ -353,14 +370,15 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Лучшие параметры: {'activation': 'tanh', 'alpha': 0.0001, 'hidden_layer_sizes': (50,), 'solver': 'adam'}\n",
|
||||
"Лучшие параметры: <bound method BaseEstimator.get_params of MLPClassifier(activation='tanh', hidden_layer_sizes=(50,), max_iter=500,\n",
|
||||
" random_state=42)>\n",
|
||||
"Точность (Accuracy): 0.7587\n",
|
||||
" precision recall f1-score support\n",
|
||||
"\n",
|
||||
" 0 0.76 0.70 0.73 73\n",
|
||||
" 1 0.84 0.59 0.70 83\n",
|
||||
" 2 0.72 0.92 0.81 83\n",
|
||||
" 3 0.74 0.83 0.78 76\n",
|
||||
" autumn 0.76 0.70 0.73 73\n",
|
||||
" spring 0.84 0.59 0.70 83\n",
|
||||
" summer 0.72 0.92 0.81 83\n",
|
||||
" winter 0.74 0.83 0.78 76\n",
|
||||
"\n",
|
||||
" accuracy 0.76 315\n",
|
||||
" macro avg 0.77 0.76 0.75 315\n",
|
||||
@@ -386,6 +404,7 @@
|
||||
" data = np.load(\"processed_data.npz\", allow_pickle=True)\n",
|
||||
" X_train, X_val, X_test = data[\"X_train\"], data[\"X_val\"], data[\"X_test\"]\n",
|
||||
" y_train, y_val, y_test = data[\"y_train\"], data[\"y_val\"], data[\"y_test\"]\n",
|
||||
" classes = data[\"classes\"]\n",
|
||||
" except FileNotFoundError:\n",
|
||||
" print(\"Ошибка: Файл processed_data.npz не найден. Запустите task1_preprocessing() перед выполнением этой задачи.\")\n",
|
||||
" return\n",
|
||||
@@ -407,14 +426,14 @@
|
||||
"\n",
|
||||
" # 4. Лучшая модель и её параметры\n",
|
||||
" best_model = grid_search.best_estimator_\n",
|
||||
" print(\"Лучшие параметры:\", grid_search.best_params_)\n",
|
||||
" print(\"Лучшие параметры:\", best_model.get_params)\n",
|
||||
"\n",
|
||||
" # 5. Оценка модели на тестовом наборе\n",
|
||||
" y_pred = best_model.predict(X_test.reshape(X_test.shape[0], -1))\n",
|
||||
"\n",
|
||||
" accuracy = accuracy_score(y_test, y_pred)\n",
|
||||
" print(f\"Точность (Accuracy): {accuracy:.4f}\")\n",
|
||||
" print(classification_report(y_test, y_pred))\n",
|
||||
" print(classification_report(y_test, y_pred, target_names=classes))\n",
|
||||
"\n",
|
||||
"# Запуск обучения MLP\n",
|
||||
"task2_mlp()\n"
|
||||
@@ -422,25 +441,28 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 59,
|
||||
"execution_count": 81,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Epoch 1/50\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"ename": "ValueError",
|
||||
"evalue": "Computed output size would be negative. Received `inputs shape=(None, 0, 64)`, `kernel shape=(3, 64, 32)`, `dilation_rate=[1]`.",
|
||||
"evalue": "Exception encountered when calling Sequential.call().\n\n\u001b[1mInput 0 of layer \"conv1d_24\" is incompatible with the layer: expected axis -1 of input shape to have value 3, but received input with shape (None, 3, 24)\u001b[0m\n\nArguments received by Sequential.call():\n • inputs=tf.Tensor(shape=(None, 3, 24), dtype=float32)\n • training=True\n • mask=None",
|
||||
"output_type": "error",
|
||||
"traceback": [
|
||||
"\u001b[31m---------------------------------------------------------------------------\u001b[39m",
|
||||
"\u001b[31mValueError\u001b[39m Traceback (most recent call last)",
|
||||
"\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[59]\u001b[39m\u001b[32m, line 74\u001b[39m\n\u001b[32m 71\u001b[39m model.save(\u001b[33m\"\u001b[39m\u001b[33m1d_cnn_model.h5\u001b[39m\u001b[33m\"\u001b[39m)\n\u001b[32m 73\u001b[39m \u001b[38;5;66;03m# Запуск обучения 1D CNN\u001b[39;00m\n\u001b[32m---> \u001b[39m\u001b[32m74\u001b[39m \u001b[43mtask3_1d_cnn\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n",
|
||||
"\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[59]\u001b[39m\u001b[32m, line 33\u001b[39m, in \u001b[36mtask3_1d_cnn\u001b[39m\u001b[34m()\u001b[39m\n\u001b[32m 30\u001b[39m y_test = to_categorical(y_test, num_classes)\n\u001b[32m 32\u001b[39m \u001b[38;5;66;03m# Построение модели 1D CNN\u001b[39;00m\n\u001b[32m---> \u001b[39m\u001b[32m33\u001b[39m model = \u001b[43mSequential\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\n\u001b[32m 34\u001b[39m \u001b[43m \u001b[49m\u001b[43mtf\u001b[49m\u001b[43m.\u001b[49m\u001b[43mkeras\u001b[49m\u001b[43m.\u001b[49m\u001b[43mlayers\u001b[49m\u001b[43m.\u001b[49m\u001b[43mConv1D\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfilters\u001b[49m\u001b[43m=\u001b[49m\u001b[32;43m64\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkernel_size\u001b[49m\u001b[43m=\u001b[49m\u001b[32;43m3\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mactivation\u001b[49m\u001b[43m=\u001b[49m\u001b[33;43m'\u001b[39;49m\u001b[33;43mrelu\u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43minput_shape\u001b[49m\u001b[43m=\u001b[49m\u001b[43m(\u001b[49m\u001b[32;43m3\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[32;43m24\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;66;43;03m# Corrected input shape\u001b[39;49;00m\n\u001b[32m 35\u001b[39m \u001b[43m \u001b[49m\u001b[43mtf\u001b[49m\u001b[43m.\u001b[49m\u001b[43mkeras\u001b[49m\u001b[43m.\u001b[49m\u001b[43mlayers\u001b[49m\u001b[43m.\u001b[49m\u001b[43mMaxPooling1D\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpool_size\u001b[49m\u001b[43m=\u001b[49m\u001b[32;43m2\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 36\u001b[39m \u001b[43m \u001b[49m\u001b[43mtf\u001b[49m\u001b[43m.\u001b[49m\u001b[43mkeras\u001b[49m\u001b[43m.\u001b[49m\u001b[43mlayers\u001b[49m\u001b[43m.\u001b[49m\u001b[43mConv1D\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfilters\u001b[49m\u001b[43m=\u001b[49m\u001b[32;43m32\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkernel_size\u001b[49m\u001b[43m=\u001b[49m\u001b[32;43m3\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mactivation\u001b[49m\u001b[43m=\u001b[49m\u001b[33;43m'\u001b[39;49m\u001b[33;43mrelu\u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 37\u001b[39m \u001b[43m \u001b[49m\u001b[43mtf\u001b[49m\u001b[43m.\u001b[49m\u001b[43mkeras\u001b[49m\u001b[43m.\u001b[49m\u001b[43mlayers\u001b[49m\u001b[43m.\u001b[49m\u001b[43mMaxPooling1D\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpool_size\u001b[49m\u001b[43m=\u001b[49m\u001b[32;43m2\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 38\u001b[39m \u001b[43m \u001b[49m\u001b[43mtf\u001b[49m\u001b[43m.\u001b[49m\u001b[43mkeras\u001b[49m\u001b[43m.\u001b[49m\u001b[43mlayers\u001b[49m\u001b[43m.\u001b[49m\u001b[43mFlatten\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 39\u001b[39m \u001b[43m \u001b[49m\u001b[43mtf\u001b[49m\u001b[43m.\u001b[49m\u001b[43mkeras\u001b[49m\u001b[43m.\u001b[49m\u001b[43mlayers\u001b[49m\u001b[43m.\u001b[49m\u001b[43mDense\u001b[49m\u001b[43m(\u001b[49m\u001b[32;43m64\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mactivation\u001b[49m\u001b[43m=\u001b[49m\u001b[33;43m'\u001b[39;49m\u001b[33;43mrelu\u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 40\u001b[39m \u001b[43m \u001b[49m\u001b[43mtf\u001b[49m\u001b[43m.\u001b[49m\u001b[43mkeras\u001b[49m\u001b[43m.\u001b[49m\u001b[43mlayers\u001b[49m\u001b[43m.\u001b[49m\u001b[43mDropout\u001b[49m\u001b[43m(\u001b[49m\u001b[32;43m0.5\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 41\u001b[39m \u001b[43m \u001b[49m\u001b[43mtf\u001b[49m\u001b[43m.\u001b[49m\u001b[43mkeras\u001b[49m\u001b[43m.\u001b[49m\u001b[43mlayers\u001b[49m\u001b[43m.\u001b[49m\u001b[43mDense\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnum_classes\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mactivation\u001b[49m\u001b[43m=\u001b[49m\u001b[33;43m'\u001b[39;49m\u001b[33;43msoftmax\u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[32m 42\u001b[39m \u001b[43m\u001b[49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 44\u001b[39m \u001b[38;5;66;03m# Компиляция модели\u001b[39;00m\n\u001b[32m 45\u001b[39m model.compile(optimizer=Adam(learning_rate=\u001b[32m0.001\u001b[39m),\n\u001b[32m 46\u001b[39m loss=\u001b[33m'\u001b[39m\u001b[33mcategorical_crossentropy\u001b[39m\u001b[33m'\u001b[39m,\n\u001b[32m 47\u001b[39m metrics=[\u001b[33m'\u001b[39m\u001b[33maccuracy\u001b[39m\u001b[33m'\u001b[39m])\n",
|
||||
"\u001b[36mFile \u001b[39m\u001b[32m/var/data/python/lib/python3.12/site-packages/keras/src/models/sequential.py:76\u001b[39m, in \u001b[36mSequential.__init__\u001b[39m\u001b[34m(self, layers, trainable, name)\u001b[39m\n\u001b[32m 74\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m layer \u001b[38;5;129;01min\u001b[39;00m layers:\n\u001b[32m 75\u001b[39m \u001b[38;5;28mself\u001b[39m.add(layer, rebuild=\u001b[38;5;28;01mFalse\u001b[39;00m)\n\u001b[32m---> \u001b[39m\u001b[32m76\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_maybe_rebuild\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n",
|
||||
"\u001b[36mFile \u001b[39m\u001b[32m/var/data/python/lib/python3.12/site-packages/keras/src/models/sequential.py:149\u001b[39m, in \u001b[36mSequential._maybe_rebuild\u001b[39m\u001b[34m(self)\u001b[39m\n\u001b[32m 147\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(\u001b[38;5;28mself\u001b[39m._layers[\u001b[32m0\u001b[39m], InputLayer) \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m._layers) > \u001b[32m1\u001b[39m:\n\u001b[32m 148\u001b[39m input_shape = \u001b[38;5;28mself\u001b[39m._layers[\u001b[32m0\u001b[39m].batch_shape\n\u001b[32m--> \u001b[39m\u001b[32m149\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mbuild\u001b[49m\u001b[43m(\u001b[49m\u001b[43minput_shape\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 150\u001b[39m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(\u001b[38;5;28mself\u001b[39m._layers[\u001b[32m0\u001b[39m], \u001b[33m\"\u001b[39m\u001b[33minput_shape\u001b[39m\u001b[33m\"\u001b[39m) \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m._layers) > \u001b[32m1\u001b[39m:\n\u001b[32m 151\u001b[39m \u001b[38;5;66;03m# We can build the Sequential model if the first layer has the\u001b[39;00m\n\u001b[32m 152\u001b[39m \u001b[38;5;66;03m# `input_shape` property. This is most commonly found in Functional\u001b[39;00m\n\u001b[32m 153\u001b[39m \u001b[38;5;66;03m# model.\u001b[39;00m\n\u001b[32m 154\u001b[39m input_shape = \u001b[38;5;28mself\u001b[39m._layers[\u001b[32m0\u001b[39m].input_shape\n",
|
||||
"\u001b[36mFile \u001b[39m\u001b[32m/var/data/python/lib/python3.12/site-packages/keras/src/layers/layer.py:230\u001b[39m, in \u001b[36mLayer.__new__.<locals>.build_wrapper\u001b[39m\u001b[34m(*args, **kwargs)\u001b[39m\n\u001b[32m 228\u001b[39m \u001b[38;5;28;01mwith\u001b[39;00m obj._open_name_scope():\n\u001b[32m 229\u001b[39m obj._path = current_path()\n\u001b[32m--> \u001b[39m\u001b[32m230\u001b[39m \u001b[43moriginal_build_method\u001b[49m\u001b[43m(\u001b[49m\u001b[43m*\u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 231\u001b[39m \u001b[38;5;66;03m# Record build config.\u001b[39;00m\n\u001b[32m 232\u001b[39m signature = inspect.signature(original_build_method)\n",
|
||||
"\u001b[36mFile \u001b[39m\u001b[32m/var/data/python/lib/python3.12/site-packages/keras/src/models/sequential.py:195\u001b[39m, in \u001b[36mSequential.build\u001b[39m\u001b[34m(self, input_shape)\u001b[39m\n\u001b[32m 193\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m layer \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m._layers[\u001b[32m1\u001b[39m:]:\n\u001b[32m 194\u001b[39m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[32m--> \u001b[39m\u001b[32m195\u001b[39m x = \u001b[43mlayer\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 196\u001b[39m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mNotImplementedError\u001b[39;00m:\n\u001b[32m 197\u001b[39m \u001b[38;5;66;03m# Can happen if shape inference is not implemented.\u001b[39;00m\n\u001b[32m 198\u001b[39m \u001b[38;5;66;03m# TODO: consider reverting inbound nodes on layers processed.\u001b[39;00m\n\u001b[32m 199\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m\n",
|
||||
"\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[81]\u001b[39m\u001b[32m, line 76\u001b[39m\n\u001b[32m 73\u001b[39m model.save(\u001b[33m\"\u001b[39m\u001b[33m1d_cnn_model.h5\u001b[39m\u001b[33m\"\u001b[39m)\n\u001b[32m 75\u001b[39m \u001b[38;5;66;03m# Запуск обучения 1D CNN\u001b[39;00m\n\u001b[32m---> \u001b[39m\u001b[32m76\u001b[39m \u001b[43mtask3_1d_cnn\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n",
|
||||
"\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[81]\u001b[39m\u001b[32m, line 56\u001b[39m, in \u001b[36mtask3_1d_cnn\u001b[39m\u001b[34m()\u001b[39m\n\u001b[32m 47\u001b[39m model.compile(optimizer=Adam(learning_rate=\u001b[32m0.001\u001b[39m),\n\u001b[32m 48\u001b[39m loss=\u001b[33m'\u001b[39m\u001b[33mcategorical_crossentropy\u001b[39m\u001b[33m'\u001b[39m,\n\u001b[32m 49\u001b[39m metrics=[\u001b[33m'\u001b[39m\u001b[33maccuracy\u001b[39m\u001b[33m'\u001b[39m])\n\u001b[32m 51\u001b[39m \u001b[38;5;66;03m# X_train = np.transpose(X_train, (0, 2, 1))\u001b[39;00m\n\u001b[32m 52\u001b[39m \u001b[38;5;66;03m# X_val = np.transpose(X_val, (0, 2, 1))\u001b[39;00m\n\u001b[32m 53\u001b[39m \u001b[38;5;66;03m# X_test = np.transpose(X_test, (0, 2, 1))\u001b[39;00m\n\u001b[32m 54\u001b[39m \n\u001b[32m 55\u001b[39m \u001b[38;5;66;03m# Обучение модели\u001b[39;00m\n\u001b[32m---> \u001b[39m\u001b[32m56\u001b[39m history = \u001b[43mmodel\u001b[49m\u001b[43m.\u001b[49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX_train\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my_train\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 57\u001b[39m \u001b[43m \u001b[49m\u001b[43mvalidation_data\u001b[49m\u001b[43m=\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX_val\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my_val\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 58\u001b[39m \u001b[43m \u001b[49m\u001b[43mepochs\u001b[49m\u001b[43m=\u001b[49m\u001b[32;43m50\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[32m 59\u001b[39m \u001b[43m \u001b[49m\u001b[43mbatch_size\u001b[49m\u001b[43m=\u001b[49m\u001b[32;43m32\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[32m 60\u001b[39m \u001b[43m \u001b[49m\u001b[43mverbose\u001b[49m\u001b[43m=\u001b[49m\u001b[32;43m1\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[32m 62\u001b[39m \u001b[38;5;66;03m# Оценка модели на тестовом наборе\u001b[39;00m\n\u001b[32m 63\u001b[39m y_pred = model.predict(X_test)\n",
|
||||
"\u001b[36mFile \u001b[39m\u001b[32m/var/data/python/lib/python3.12/site-packages/keras/src/utils/traceback_utils.py:122\u001b[39m, in \u001b[36mfilter_traceback.<locals>.error_handler\u001b[39m\u001b[34m(*args, **kwargs)\u001b[39m\n\u001b[32m 119\u001b[39m filtered_tb = _process_traceback_frames(e.__traceback__)\n\u001b[32m 120\u001b[39m \u001b[38;5;66;03m# To get the full stack trace, call:\u001b[39;00m\n\u001b[32m 121\u001b[39m \u001b[38;5;66;03m# `keras.config.disable_traceback_filtering()`\u001b[39;00m\n\u001b[32m--> \u001b[39m\u001b[32m122\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m e.with_traceback(filtered_tb) \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[32m 123\u001b[39m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[32m 124\u001b[39m \u001b[38;5;28;01mdel\u001b[39;00m filtered_tb\n",
|
||||
"\u001b[36mFile \u001b[39m\u001b[32m/var/data/python/lib/python3.12/site-packages/keras/src/ops/operation_utils.py:221\u001b[39m, in \u001b[36mcompute_conv_output_shape\u001b[39m\u001b[34m(input_shape, filters, kernel_size, strides, padding, data_format, dilation_rate)\u001b[39m\n\u001b[32m 219\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mlen\u001b[39m(output_spatial_shape)):\n\u001b[32m 220\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m i \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m none_dims \u001b[38;5;129;01mand\u001b[39;00m output_spatial_shape[i] < \u001b[32m0\u001b[39m:\n\u001b[32m--> \u001b[39m\u001b[32m221\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[32m 222\u001b[39m \u001b[33m\"\u001b[39m\u001b[33mComputed output size would be negative. Received \u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 223\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33m`inputs shape=\u001b[39m\u001b[38;5;132;01m{\u001b[39;00minput_shape\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m`, \u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 224\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33m`kernel shape=\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mkernel_shape\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m`, \u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 225\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33m`dilation_rate=\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mdilation_rate\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m`.\u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 226\u001b[39m )\n\u001b[32m 227\u001b[39m \u001b[38;5;28;01melif\u001b[39;00m padding == \u001b[33m\"\u001b[39m\u001b[33msame\u001b[39m\u001b[33m\"\u001b[39m \u001b[38;5;129;01mor\u001b[39;00m padding == \u001b[33m\"\u001b[39m\u001b[33mcausal\u001b[39m\u001b[33m\"\u001b[39m:\n\u001b[32m 228\u001b[39m output_spatial_shape = np.floor((spatial_shape - \u001b[32m1\u001b[39m) / strides) + \u001b[32m1\u001b[39m\n",
|
||||
"\u001b[31mValueError\u001b[39m: Computed output size would be negative. Received `inputs shape=(None, 0, 64)`, `kernel shape=(3, 64, 32)`, `dilation_rate=[1]`."
|
||||
"\u001b[36mFile \u001b[39m\u001b[32m/var/data/python/lib/python3.12/site-packages/keras/src/layers/input_spec.py:227\u001b[39m, in \u001b[36massert_input_compatibility\u001b[39m\u001b[34m(input_spec, inputs, layer_name)\u001b[39m\n\u001b[32m 222\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m axis, value \u001b[38;5;129;01min\u001b[39;00m spec.axes.items():\n\u001b[32m 223\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m value \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m shape[axis] \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m {\n\u001b[32m 224\u001b[39m value,\n\u001b[32m 225\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[32m 226\u001b[39m }:\n\u001b[32m--> \u001b[39m\u001b[32m227\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[32m 228\u001b[39m \u001b[33mf\u001b[39m\u001b[33m'\u001b[39m\u001b[33mInput \u001b[39m\u001b[38;5;132;01m{\u001b[39;00minput_index\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m of layer \u001b[39m\u001b[33m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mlayer_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m\"\u001b[39m\u001b[33m is \u001b[39m\u001b[33m'\u001b[39m\n\u001b[32m 229\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mincompatible with the layer: expected axis \u001b[39m\u001b[38;5;132;01m{\u001b[39;00maxis\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m \u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 230\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mof input shape to have value \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mvalue\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m, \u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 231\u001b[39m \u001b[33m\"\u001b[39m\u001b[33mbut received input with \u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 232\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mshape \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mshape\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m\"\u001b[39m\n\u001b[32m 233\u001b[39m )\n\u001b[32m 234\u001b[39m \u001b[38;5;66;03m# Check shape.\u001b[39;00m\n\u001b[32m 235\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m spec.shape \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n",
|
||||
"\u001b[31mValueError\u001b[39m: Exception encountered when calling Sequential.call().\n\n\u001b[1mInput 0 of layer \"conv1d_24\" is incompatible with the layer: expected axis -1 of input shape to have value 3, but received input with shape (None, 3, 24)\u001b[0m\n\nArguments received by Sequential.call():\n • inputs=tf.Tensor(shape=(None, 3, 24), dtype=float32)\n • training=True\n • mask=None"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -476,9 +498,12 @@
|
||||
" y_val = to_categorical(y_val, num_classes)\n",
|
||||
" y_test = to_categorical(y_test, num_classes)\n",
|
||||
"\n",
|
||||
" # strategy = tf.distribute.get_strategy()\n",
|
||||
" # with strategy.scope():\n",
|
||||
"\n",
|
||||
" # Построение модели 1D CNN\n",
|
||||
" model = Sequential([\n",
|
||||
" tf.keras.layers.Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(3, 24)), # Corrected input shape\n",
|
||||
" tf.keras.layers.Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(24, 3)), # Corrected input shape\n",
|
||||
" tf.keras.layers.MaxPooling1D(pool_size=2),\n",
|
||||
" tf.keras.layers.Conv1D(filters=32, kernel_size=3, activation='relu'),\n",
|
||||
" tf.keras.layers.MaxPooling1D(pool_size=2),\n",
|
||||
@@ -487,16 +512,15 @@
|
||||
" tf.keras.layers.Dropout(0.5),\n",
|
||||
" tf.keras.layers.Dense(num_classes, activation='softmax')\n",
|
||||
" ])\n",
|
||||
"\n",
|
||||
" # Компиляция модели\n",
|
||||
" model.compile(optimizer=Adam(learning_rate=0.001),\n",
|
||||
" loss='categorical_crossentropy',\n",
|
||||
" metrics=['accuracy'])\n",
|
||||
"\n",
|
||||
" X_train = np.transpose(X_train, (0, 2, 1))\n",
|
||||
" X_val = np.transpose(X_val, (0, 2, 1))\n",
|
||||
" X_test = np.transpose(X_test, (0, 2, 1))\n",
|
||||
" \n",
|
||||
" # X_train = np.transpose(X_train, (0, 2, 1))\n",
|
||||
" # X_val = np.transpose(X_val, (0, 2, 1))\n",
|
||||
" # X_test = np.transpose(X_test, (0, 2, 1))\n",
|
||||
"\n",
|
||||
" # Обучение модели\n",
|
||||
" history = model.fit(X_train, y_train,\n",
|
||||
" validation_data=(X_val, y_val),\n",
|
||||
|
||||
Reference in New Issue
Block a user