{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":77476,"databundleVersionId":8462666,"sourceType":"competition"}],"dockerImageVersionId":31153,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-10-20T19:03:04.516007Z","iopub.execute_input":"2025-10-20T19:03:04.516874Z","iopub.status.idle":"2025-10-20T19:03:04.525583Z","shell.execute_reply.started":"2025-10-20T19:03:04.516839Z","shell.execute_reply":"2025-10-20T19:03:04.524283Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## 딥러닝 공부용\n인공지능 기말고사에 쓰려고 해봄","metadata":{}},{"cell_type":"code","source":"import torch\nimport torch.nn as nn\n\nclass MLP(nn.Module):\n    def __init__(self, input_dim, hidden_dim_1, output_dim):\n        super(MLP, self).__init__()\n        self.input_layer = nn.Linear(input_dim, hidden_dim_1, True)\n        self.hidden_layer_1 = nn.Linear(hidden_dim_1, output_dim, True)\n        self.activator = nn.ReLU()\n        self.model = nn.Sequential(self.input_layer, self.activator, self.hidden_layer_1)\n\n    def forward(self, X):\n        return self.model(X)\n\nprint('model set')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-20T19:03:04.527536Z","iopub.execute_input":"2025-10-20T19:03:04.527885Z","iopub.status.idle":"2025-10-20T19:03:04.560791Z","shell.execute_reply.started":"2025-10-20T19:03:04.527855Z","shell.execute_reply":"2025-10-20T19:03:04.559392Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"model = MLP(784, 1024, 10)\nprint(list(model.modules()))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-20T19:03:04.562689Z","iopub.execute_input":"2025-10-20T19:03:04.563063Z","iopub.status.idle":"2025-10-20T19:03:04.605371Z","shell.execute_reply.started":"2025-10-20T19:03:04.563030Z","shell.execute_reply":"2025-10-20T19:03:04.604262Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train = pd.read_csv('/kaggle/input/2024-smarcle-ks-3-fashion-mnist2/train.csv')\ntest = pd.read_csv('/kaggle/input/2024-smarcle-ks-3-fashion-mnist2/test.csv')\n\ntrain.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-20T19:03:04.606040Z","iopub.execute_input":"2025-10-20T19:03:04.606371Z","iopub.status.idle":"2025-10-20T19:03:11.051253Z","shell.execute_reply.started":"2025-10-20T19:03:04.606344Z","shell.execute_reply":"2025-10-20T19:03:11.050291Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\n\nX_train, X_val, y_train, y_val = train_test_split(train.drop('label', axis=1), train['label'], test_size=0.1, random_state = 42)\nX_train.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-20T19:03:11.053009Z","iopub.execute_input":"2025-10-20T19:03:11.053290Z","iopub.status.idle":"2025-10-20T19:03:11.627271Z","shell.execute_reply.started":"2025-10-20T19:03:11.053270Z","shell.execute_reply":"2025-10-20T19:03:11.626321Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"y_train.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-20T19:03:11.628027Z","iopub.execute_input":"2025-10-20T19:03:11.628270Z","iopub.status.idle":"2025-10-20T19:03:11.635518Z","shell.execute_reply.started":"2025-10-20T19:03:11.628252Z","shell.execute_reply":"2025-10-20T19:03:11.634577Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from torch.utils.data import TensorDataset\n\nbatchsize = 64\ntrain_X = np.array(X_train)\ntrain_Y = np.array(y_train)\nval_X = np.array(X_val)\nval_Y = np.array(y_val)\ntest_X = np.array(test)\n\ntrain_X = torch.tensor(train_X)\ntrain_Y = torch.tensor(train_Y)\nval_X = torch.tensor(val_X)\nval_Y = torch.tensor(val_Y)\ntest_X = torch.tensor(test_X)\n\ntrain_dataset = TensorDataset(train_X,train_Y)\nval_dataset = TensorDataset(val_X, val_Y)\ntest_dataset = TensorDataset(test_X)\n\ntrain_dataloader = torch.utils.data.DataLoader(train_dataset, batch_size=batchsize)\nval_dataloader = torch.utils.data.DataLoader(val_dataset, batch_size=batchsize)\ntest_dataloader = torch.utils.data.DataLoader(test_dataset, batch_size=batchsize, shuffle=False)\n\ntrain_dataloader","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-20T19:03:11.636658Z","iopub.execute_input":"2025-10-20T19:03:11.636931Z","iopub.status.idle":"2025-10-20T19:03:12.080754Z","shell.execute_reply.started":"2025-10-20T19:03:11.636910Z","shell.execute_reply":"2025-10-20T19:03:12.079687Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## 파라미터 정의\n* 로스 : 실제 정답과 내가 낸 정답 간의 오차\n* 옵티마이저 : 데이터와 로스를 바탕으로 모델을 어떻게 업데이트할지의 방법","metadata":{}},{"cell_type":"code","source":"import tqdm\n\noptim = torch.optim.Adam(model.parameters(), lr = 0.001)\nloss = nn.CrossEntropyLoss()\n\nprint('gg')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-20T19:03:12.082087Z","iopub.execute_input":"2025-10-20T19:03:12.082684Z","iopub.status.idle":"2025-10-20T19:03:12.090135Z","shell.execute_reply.started":"2025-10-20T19:03:12.082643Z","shell.execute_reply":"2025-10-20T19:03:12.088488Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"for iter in tqdm.tqdm(range(30)):\n    for x, y in train_dataloader:\n        optim.zero_grad()\n\nloss(model(x.float()), y).backward()\noptim.step()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-20T19:04:23.140903Z","iopub.execute_input":"2025-10-20T19:04:23.141332Z","iopub.status.idle":"2025-10-20T19:04:44.461466Z","shell.execute_reply.started":"2025-10-20T19:04:23.141306Z","shell.execute_reply":"2025-10-20T19:04:44.460307Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"for iter in tqdm.tqdm(range(30)):\n    for x, y in train_dataloader:\n        y_answ = model(x.float())\n        loss_value = loss(y_answ, y)\n        optim.zero_grad()\n        loss_value.backward()\n        optim.step()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-20T19:11:49.523023Z","iopub.execute_input":"2025-10-20T19:11:49.523370Z","iopub.status.idle":"2025-10-20T19:17:10.622097Z","shell.execute_reply.started":"2025-10-20T19:11:49.523344Z","shell.execute_reply":"2025-10-20T19:17:10.621188Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"메트릭은 그냥 사이킷런 쓸 것","metadata":{}},{"cell_type":"code","source":"for iter in tqdm.tqdm(range(30)):\n    for x, y in train_dataloader:\n        y_answ = model(x.float())\n        loss_value = loss(y_answ, y)\n        optim.zero_grad()\n        loss_value.backward()\n        optim.step()","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}