{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "markdown", "source": [ "# Нейросеть определяет класс предмета из датасета fashion_mnist.\n", "\n", "В данном блокноте проходит сборка, обучение и сохранение нейросети" ], "metadata": { "id": "yhiVt36tLkIi" } }, { "cell_type": "code", "execution_count": 14, "metadata": { "id": "jEe1cVPhIwI1" }, "outputs": [], "source": [ "from keras.datasets import fashion_mnist\n", "\n", "# Загрузка датасета\n", "(trainX, trainy), (testX, testy) = fashion_mnist.load_data()" ] }, { "cell_type": "code", "source": [ "# Размеры train, text\n", "print(len(trainX), len(testX))" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "ZlrfncGeTEvM", "outputId": "1ffff0f1-a1e8-4972-b84a-689c9acef905" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "60000 10000\n" ] } ] }, { "cell_type": "code", "source": [ "# Нормализация данных\n", "trainX = trainX.astype(\"float32\") / 255.0\n", "testX = testX.astype(\"float32\") / 255.0" ], "metadata": { "id": "036BwwyKIyjG" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "from keras.utils import to_categorical\n", "\n", "# Преобразовываем в категориальный датасет\n", "trainY = to_categorical(trainy, num_classes=10)\n", "testY = to_categorical(testy, num_classes=10)" ], "metadata": { "id": "yYrUG1wzI52P" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "from keras.models import Sequential\n", "from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense\n", "\n", "# Сборка модели\n", "model = Sequential()\n", "model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))\n", "model.add(MaxPooling2D((2, 2)))\n", "model.add(Flatten())\n", "model.add(Dense(10, activation='softmax'))\n", "\n", "# Компиляция\n", "model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])" ], "metadata": { "id": "E0bZrC3QJGiV" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "# Визуализация модели\n", "from keras.utils.vis_utils import plot_model\n", "plot_model(model, to_file='model_plot.png', show_shapes=True, show_layer_names=True, show_layer_activations=True)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 533 }, "id": "oBjZKfjyMPVL", "outputId": "84b6162a-7901-4158-a833-a5daf5eabdbe" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "execution_count": 6 } ] }, { "cell_type": "code", "source": [ "# Данные модели\n", "model.summary()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "a_49lanlUzPk", "outputId": "0843ed80-6a26-4138-810f-7c573f671e3e" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Model: \"sequential\"\n", "_________________________________________________________________\n", " Layer (type) Output Shape Param # \n", "=================================================================\n", " conv2d (Conv2D) (None, 26, 26, 32) 320 \n", " \n", " max_pooling2d (MaxPooling2D (None, 13, 13, 32) 0 \n", " ) \n", " \n", " flatten (Flatten) (None, 5408) 0 \n", " \n", " dense (Dense) (None, 10) 54090 \n", " \n", "=================================================================\n", "Total params: 54,410\n", "Trainable params: 54,410\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" ] } ] }, { "cell_type": "code", "source": [ "# Обучение\n", "model.fit(trainX, trainY, validation_data=(testX, testY), epochs=10, batch_size=32)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "akqi9AZxJfXa", "outputId": "3fcb47ed-d12d-4d27-9d28-008207dcb162" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Epoch 1/10\n", "1875/1875 [==============================] - 36s 19ms/step - loss: 0.4560 - accuracy: 0.8414 - val_loss: 0.3957 - val_accuracy: 0.8551\n", "Epoch 2/10\n", "1875/1875 [==============================] - 36s 19ms/step - loss: 0.3213 - accuracy: 0.8884 - val_loss: 0.3204 - val_accuracy: 0.8876\n", "Epoch 3/10\n", "1875/1875 [==============================] - 37s 20ms/step - loss: 0.2857 - accuracy: 0.9000 - val_loss: 0.3135 - val_accuracy: 0.8908\n", "Epoch 4/10\n", "1875/1875 [==============================] - 34s 18ms/step - loss: 0.2604 - accuracy: 0.9087 - val_loss: 0.2971 - val_accuracy: 0.8968\n", "Epoch 5/10\n", "1875/1875 [==============================] - 35s 19ms/step - loss: 0.2420 - accuracy: 0.9137 - val_loss: 0.2807 - val_accuracy: 0.9011\n", "Epoch 6/10\n", "1875/1875 [==============================] - 33s 18ms/step - loss: 0.2276 - accuracy: 0.9191 - val_loss: 0.2848 - val_accuracy: 0.8992\n", "Epoch 7/10\n", "1875/1875 [==============================] - 34s 18ms/step - loss: 0.2124 - accuracy: 0.9254 - val_loss: 0.2771 - val_accuracy: 0.9027\n", "Epoch 8/10\n", "1875/1875 [==============================] - 34s 18ms/step - loss: 0.2003 - accuracy: 0.9282 - val_loss: 0.2706 - val_accuracy: 0.9043\n", "Epoch 9/10\n", "1875/1875 [==============================] - 33s 17ms/step - loss: 0.1899 - accuracy: 0.9316 - val_loss: 0.2738 - val_accuracy: 0.9040\n", "Epoch 10/10\n", "1875/1875 [==============================] - 35s 18ms/step - loss: 0.1802 - accuracy: 0.9347 - val_loss: 0.2684 - val_accuracy: 0.9093\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [ "" ] }, "metadata": {}, "execution_count": 8 } ] }, { "cell_type": "code", "source": [ "loss, accuracy = model.evaluate(trainX, trainY)\n", "print(\"Train Loss:\", loss)\n", "print(\"Train Accuracy:\", accuracy)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "GJzq00W2WmC9", "outputId": "691c4e22-36cf-46a9-9033-a79b4b893a6b" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "1875/1875 [==============================] - 13s 7ms/step - loss: 0.1615 - accuracy: 0.9436\n", "Train Loss: 0.16153603792190552\n", "Train Accuracy: 0.9435666799545288\n" ] } ] }, { "cell_type": "code", "source": [ "\n", "loss, accuracy = model.evaluate(testX, testY, verbose=0)\n", "print(\"Test Loss:\", loss)\n", "print(\"Test Accuracy:\", accuracy)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "4NYML3sHWfyN", "outputId": "6dd8d835-b6c4-4e39-ca3c-510789686384" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Test Loss: 0.26842355728149414\n", "Test Accuracy: 0.9093000292778015\n" ] } ] }, { "cell_type": "code", "source": [ "print(\"Validation Loss:\", loss)\n", "print(\"Validation Accuracy:\", accuracy)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "TGtnhaDvWttd", "outputId": "6fee7ac8-542c-4f92-edd8-c325837691fa" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Validation Loss: 0.26842355728149414\n", "Validation Accuracy: 0.9093000292778015\n" ] } ] }, { "cell_type": "code", "source": [ "model.save(\"neuro.h5\")\n", "model_file = drive.CreateFile({'neuro.h5' : 'neuro.h5'}) model_file.SetContentFile('neuro.h5') model_file.Upload()" ], "metadata": { "id": "cqN38OBpJiUh", "colab": { "base_uri": "https://localhost:8080/", "height": 135 }, "outputId": "add905b4-8cd0-47a0-ca49-606c864ba38b" }, "execution_count": 17, "outputs": [ { "output_type": "error", "ename": "SyntaxError", "evalue": "ignored", "traceback": [ "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m2\u001b[0m\n\u001b[0;31m model_file = drive.CreateFile({'neuro.h5' : 'neuro.h5'}) model_file.SetContentFile('neuro.h5') model_file.Upload()\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" ] } ] } ] }