Spaces:
Runtime error
Runtime error
feat: :man_dancing: YOLO
Browse files- .gitignore +10 -0
- .ipynb_checkpoints/csv_classification-checkpoint.ipynb +610 -0
- .python-version +1 -0
- 49719_AV.wav +0 -0
- app.py +9 -2
- csv_classification.ipynb +610 -0
- examples.py +16 -0
- flagged/Recording/e02094dd02e255b311d4/13918_TV_present.wav +0 -0
- flagged/log.csv +2 -0
- gradio_cached_examples/18/log.csv +2 -0
- patient_outcome_classifier.keras +0 -0
- pyproject.toml +27 -0
- requirements-dev.lock +520 -0
- requirements.lock +520 -0
- requirements.txt +520 -9
- training_data.csv +0 -0
.gitignore
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# python generated files
|
2 |
+
__pycache__/
|
3 |
+
*.py[oc]
|
4 |
+
build/
|
5 |
+
dist/
|
6 |
+
wheels/
|
7 |
+
*.egg-info
|
8 |
+
|
9 |
+
# venv
|
10 |
+
.venv
|
.ipynb_checkpoints/csv_classification-checkpoint.ipynb
ADDED
@@ -0,0 +1,610 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 1,
|
6 |
+
"id": "be5e2cf3-4e08-4dda-b5e9-42cc43821aee",
|
7 |
+
"metadata": {},
|
8 |
+
"outputs": [],
|
9 |
+
"source": [
|
10 |
+
"import os\n",
|
11 |
+
"import glob\n",
|
12 |
+
"import numpy as np\n",
|
13 |
+
"from tqdm import tqdm\n",
|
14 |
+
"import itertools\n",
|
15 |
+
"import matplotlib.pyplot as plt\n",
|
16 |
+
"from sklearn.model_selection import train_test_split\n",
|
17 |
+
"from sklearn.metrics import classification_report, accuracy_score, confusion_matrix\n",
|
18 |
+
"from sklearn.preprocessing import LabelEncoder\n",
|
19 |
+
"from sklearn.utils import shuffle\n",
|
20 |
+
"from sklearn.utils import class_weight\n",
|
21 |
+
"import keras\n",
|
22 |
+
"from keras.models import Sequential\n",
|
23 |
+
"from keras.layers import Dense, Dropout, Activation, Flatten\n",
|
24 |
+
"from keras.layers import Convolution2D, Conv2D, MaxPooling2D, GlobalAveragePooling2D\n",
|
25 |
+
"from keras.utils import to_categorical\n",
|
26 |
+
"import numpy as np\n",
|
27 |
+
"import tensorflow as tf\n",
|
28 |
+
"from tensorflow.keras.models import Sequential\n",
|
29 |
+
"from tensorflow.keras.layers import Dense, Conv1D, Flatten, Dropout\n",
|
30 |
+
"from tensorflow.keras.utils import to_categorical\n",
|
31 |
+
"from sklearn.model_selection import train_test_split\n",
|
32 |
+
"from sklearn.preprocessing import StandardScaler\n",
|
33 |
+
"import warnings\n",
|
34 |
+
"warnings.filterwarnings('ignore', category=FutureWarning)\n",
|
35 |
+
"import matplotlib.pyplot as plt\n",
|
36 |
+
"import zipfile\n",
|
37 |
+
"from IPython.display import clear_output\n",
|
38 |
+
"import glob\n",
|
39 |
+
"import pandas as pd\n",
|
40 |
+
"import os"
|
41 |
+
]
|
42 |
+
},
|
43 |
+
{
|
44 |
+
"cell_type": "code",
|
45 |
+
"execution_count": 3,
|
46 |
+
"id": "0a41fca8-0f28-461f-98a6-6314d41481f3",
|
47 |
+
"metadata": {},
|
48 |
+
"outputs": [
|
49 |
+
{
|
50 |
+
"name": "stdout",
|
51 |
+
"output_type": "stream",
|
52 |
+
"text": [
|
53 |
+
" Age Sex Height Weight Pregnancy status Murmur Outcome\n",
|
54 |
+
"0 2 1 0.434483 0.125346 0 0 1\n",
|
55 |
+
"1 2 1 0.468966 0.099539 0 1 1\n",
|
56 |
+
"3 2 0 0.434483 0.125346 0 1 1\n",
|
57 |
+
"4 2 0 0.358621 0.082028 0 1 1\n",
|
58 |
+
"6 2 1 0.393103 0.107834 0 0 1\n",
|
59 |
+
"Number of data sample rows: 759\n"
|
60 |
+
]
|
61 |
+
}
|
62 |
+
],
|
63 |
+
"source": [
|
64 |
+
"from numpy import nan\n",
|
65 |
+
"from sklearn.preprocessing import MinMaxScaler\n",
|
66 |
+
"df = pd.read_csv(os.path.join('training_data.csv'))\n",
|
67 |
+
"\n",
|
68 |
+
"# Now drop the columns\n",
|
69 |
+
"columns_to_drop = [\n",
|
70 |
+
" \"Patient ID\", \"Recording locations\", \"Murmur locations\", \"Most audible location\",\n",
|
71 |
+
" \"Systolic murmur timing\", \"Systolic murmur shape\", \"Systolic murmur grading\",\n",
|
72 |
+
" \"Systolic murmur pitch\", \"Systolic murmur quality\", \"Diastolic murmur timing\",\n",
|
73 |
+
" \"Diastolic murmur shape\", \"Diastolic murmur grading\", \"Diastolic murmur pitch\",\n",
|
74 |
+
" \"Diastolic murmur quality\", \"Campaign\", \"Additional ID\", \"Recording locations:\",\n",
|
75 |
+
"]\n",
|
76 |
+
"df.drop(columns=columns_to_drop, inplace=True, errors='ignore')\n",
|
77 |
+
"\n",
|
78 |
+
"scaler = MinMaxScaler()\n",
|
79 |
+
"columns_to_normalize = ['Weight', 'Height']\n",
|
80 |
+
"data_to_normalize = df[columns_to_normalize]\n",
|
81 |
+
"normalized_data = scaler.fit_transform(data_to_normalize)\n",
|
82 |
+
"df_normalized = pd.DataFrame(normalized_data, columns=columns_to_normalize)\n",
|
83 |
+
"df[columns_to_normalize] = df_normalized\n",
|
84 |
+
"\n",
|
85 |
+
"\n",
|
86 |
+
"df['Pregnancy status'] = df['Pregnancy status'].apply(lambda x: 1 if x else 0)\n",
|
87 |
+
"sex2int = {'Male': 0, 'Female': 1}\n",
|
88 |
+
"df['Sex'] = df['Sex'].apply(lambda x: sex2int[x] if x in sex2int else -1)\n",
|
89 |
+
"df = df[df['Sex'] != -1]\n",
|
90 |
+
"\n",
|
91 |
+
"age2int = {'Neonate': 0, 'Infant': 1, 'Child': 2, 'Adolescent': 3}\n",
|
92 |
+
"df['Age'] = df['Age'].apply(lambda x: age2int[x] if x in age2int else -1)\n",
|
93 |
+
"df = df[df['Age'] != -1]\n",
|
94 |
+
"\n",
|
95 |
+
"df = df[df['Murmur'] != 'Unknown']\n",
|
96 |
+
"df['Murmur'] = df['Murmur'].apply(lambda x: 0 if x == 'Absent' else (1 if x == 'Present' else 2))\n",
|
97 |
+
"\n",
|
98 |
+
"outcome2int = {'Normal': 0, 'Abnormal': 1}\n",
|
99 |
+
"df['Outcome'] = df['Outcome'].apply(lambda x: outcome2int[x] if x in outcome2int else -1)\n",
|
100 |
+
"df = df[df['Outcome'] != -1]\n",
|
101 |
+
"\n",
|
102 |
+
"df = df.select_dtypes(include=[np.number])\n",
|
103 |
+
"df.dropna(inplace=True)\n",
|
104 |
+
"\n",
|
105 |
+
"\n",
|
106 |
+
"print(df.head())\n",
|
107 |
+
"print(\"Number of data sample rows:\", df.shape[0])"
|
108 |
+
]
|
109 |
+
},
|
110 |
+
{
|
111 |
+
"cell_type": "code",
|
112 |
+
"execution_count": 6,
|
113 |
+
"id": "499b212d-8acb-4ce5-a1e1-ec62d9f1142b",
|
114 |
+
"metadata": {},
|
115 |
+
"outputs": [
|
116 |
+
{
|
117 |
+
"name": "stdout",
|
118 |
+
"output_type": "stream",
|
119 |
+
"text": [
|
120 |
+
" Age Sex Height Weight Pregnancy status Murmur Outcome\n",
|
121 |
+
"0 2 1 0.446520 0.118830 0 0 1\n",
|
122 |
+
"1 2 1 0.457870 0.120511 0 1 1\n",
|
123 |
+
"2 2 0 0.423518 0.131510 0 1 1\n",
|
124 |
+
"3 2 0 0.356813 0.071461 0 1 1\n",
|
125 |
+
"4 2 1 0.396024 0.102232 0 0 1\n",
|
126 |
+
"Number of data sample rows after SMOTE: 768\n",
|
127 |
+
"Example input\n",
|
128 |
+
" Age 2.00000\n",
|
129 |
+
"Sex 1.00000\n",
|
130 |
+
"Height 0.44652\n",
|
131 |
+
"Weight 0.11883\n",
|
132 |
+
"Pregnancy status 0.00000\n",
|
133 |
+
"Murmur 0.00000\n",
|
134 |
+
"Name: 0, dtype: float64\n"
|
135 |
+
]
|
136 |
+
}
|
137 |
+
],
|
138 |
+
"source": [
|
139 |
+
"import pandas as pd\n",
|
140 |
+
"import numpy as np\n",
|
141 |
+
"from sklearn.preprocessing import MinMaxScaler, StandardScaler\n",
|
142 |
+
"from sklearn.model_selection import train_test_split\n",
|
143 |
+
"from tensorflow.keras.utils import to_categorical\n",
|
144 |
+
"from sklearn.utils import resample\n",
|
145 |
+
"from imblearn.over_sampling import SMOTE\n",
|
146 |
+
"\n",
|
147 |
+
"\n",
|
148 |
+
"noise_scale = 0.01\n",
|
149 |
+
"\n",
|
150 |
+
"numerical_cols = ['Weight', 'Height']\n",
|
151 |
+
"for col in numerical_cols:\n",
|
152 |
+
" df[col] += np.random.normal(loc=0.0, scale=noise_scale, size=df[col].shape)\n",
|
153 |
+
"\n",
|
154 |
+
"# Apply SMOTE for data aug\n",
|
155 |
+
"smote = SMOTE()\n",
|
156 |
+
"X = df.drop('Outcome', axis=1)\n",
|
157 |
+
"y = df['Outcome']\n",
|
158 |
+
"\n",
|
159 |
+
"X_sm, y_sm = smote.fit_resample(X, y)\n",
|
160 |
+
"df_sm = pd.DataFrame(X_sm, columns=X.columns)\n",
|
161 |
+
"df_sm['Outcome'] = y_sm\n",
|
162 |
+
"\n",
|
163 |
+
"\n",
|
164 |
+
"scaler = StandardScaler()\n",
|
165 |
+
"X_scaled = scaler.fit_transform(df_sm.drop('Outcome', axis=1))\n",
|
166 |
+
"X_scaled = X_scaled.reshape(X_scaled.shape[0], X_scaled.shape[1], 1)\n",
|
167 |
+
"y_encoded = to_categorical(df_sm['Outcome'])\n",
|
168 |
+
"\n",
|
169 |
+
"# Split data into training and test sets\n",
|
170 |
+
"X_train, X_test, y_train, y_test = train_test_split(X_scaled, y_encoded, test_size=0.1, random_state=42)\n",
|
171 |
+
"\n",
|
172 |
+
"# augmented data\n",
|
173 |
+
"print(df_sm.head())\n",
|
174 |
+
"print(\"Number of data sample rows after SMOTE:\", df_sm.shape[0])\n",
|
175 |
+
"print(\"Example input\\n\", df_sm.drop('Outcome', axis=1).loc[0])"
|
176 |
+
]
|
177 |
+
},
|
178 |
+
{
|
179 |
+
"cell_type": "code",
|
180 |
+
"execution_count": 7,
|
181 |
+
"id": "9a680377-7bdd-4da6-8c5b-eb9fb1336250",
|
182 |
+
"metadata": {},
|
183 |
+
"outputs": [
|
184 |
+
{
|
185 |
+
"name": "stdout",
|
186 |
+
"output_type": "stream",
|
187 |
+
"text": [
|
188 |
+
"Epoch 1/100\n"
|
189 |
+
]
|
190 |
+
},
|
191 |
+
{
|
192 |
+
"name": "stderr",
|
193 |
+
"output_type": "stream",
|
194 |
+
"text": [
|
195 |
+
"/Users/cogniveon/src/HeartMurmurClassification/.venv/lib/python3.12/site-packages/keras/src/layers/convolutional/base_conv.py:107: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n",
|
196 |
+
" super().__init__(activity_regularizer=activity_regularizer, **kwargs)\n"
|
197 |
+
]
|
198 |
+
},
|
199 |
+
{
|
200 |
+
"name": "stdout",
|
201 |
+
"output_type": "stream",
|
202 |
+
"text": [
|
203 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.5140 - loss: 0.6888 - val_accuracy: 0.6403 - val_loss: 0.6672\n",
|
204 |
+
"Epoch 2/100\n",
|
205 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 758us/step - accuracy: 0.6529 - loss: 0.6446 - val_accuracy: 0.6547 - val_loss: 0.6523\n",
|
206 |
+
"Epoch 3/100\n",
|
207 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 757us/step - accuracy: 0.6820 - loss: 0.5970 - val_accuracy: 0.6835 - val_loss: 0.6649\n",
|
208 |
+
"Epoch 4/100\n",
|
209 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 830us/step - accuracy: 0.6451 - loss: 0.6134 - val_accuracy: 0.6547 - val_loss: 0.6601\n",
|
210 |
+
"Epoch 5/100\n",
|
211 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - accuracy: 0.6527 - loss: 0.6077 - val_accuracy: 0.6475 - val_loss: 0.6574\n",
|
212 |
+
"Epoch 6/100\n",
|
213 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 875us/step - accuracy: 0.6605 - loss: 0.6117 - val_accuracy: 0.6187 - val_loss: 0.6709\n",
|
214 |
+
"Epoch 7/100\n",
|
215 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 822us/step - accuracy: 0.6460 - loss: 0.6094 - val_accuracy: 0.6259 - val_loss: 0.6673\n",
|
216 |
+
"Epoch 8/100\n",
|
217 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 827us/step - accuracy: 0.6691 - loss: 0.6166 - val_accuracy: 0.6331 - val_loss: 0.6621\n",
|
218 |
+
"Epoch 9/100\n",
|
219 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 809us/step - accuracy: 0.6584 - loss: 0.5825 - val_accuracy: 0.6403 - val_loss: 0.6667\n",
|
220 |
+
"Epoch 10/100\n",
|
221 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 860us/step - accuracy: 0.6752 - loss: 0.5976 - val_accuracy: 0.6187 - val_loss: 0.6591\n",
|
222 |
+
"Epoch 11/100\n",
|
223 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 807us/step - accuracy: 0.6603 - loss: 0.6061 - val_accuracy: 0.6187 - val_loss: 0.6664\n",
|
224 |
+
"Epoch 12/100\n",
|
225 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 845us/step - accuracy: 0.6561 - loss: 0.5776 - val_accuracy: 0.6259 - val_loss: 0.6739\n",
|
226 |
+
"Epoch 13/100\n",
|
227 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 817us/step - accuracy: 0.6700 - loss: 0.5976 - val_accuracy: 0.5971 - val_loss: 0.6730\n",
|
228 |
+
"Epoch 14/100\n",
|
229 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 919us/step - accuracy: 0.6622 - loss: 0.5886 - val_accuracy: 0.6475 - val_loss: 0.6471\n",
|
230 |
+
"Epoch 15/100\n",
|
231 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 901us/step - accuracy: 0.6307 - loss: 0.6162 - val_accuracy: 0.6259 - val_loss: 0.6728\n",
|
232 |
+
"Epoch 16/100\n",
|
233 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.7153 - loss: 0.5660 - val_accuracy: 0.6187 - val_loss: 0.6775\n",
|
234 |
+
"Epoch 17/100\n",
|
235 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 862us/step - accuracy: 0.6509 - loss: 0.5898 - val_accuracy: 0.6547 - val_loss: 0.6607\n",
|
236 |
+
"Epoch 18/100\n",
|
237 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 827us/step - accuracy: 0.6680 - loss: 0.5865 - val_accuracy: 0.6115 - val_loss: 0.6673\n",
|
238 |
+
"Epoch 19/100\n",
|
239 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 805us/step - accuracy: 0.7013 - loss: 0.5647 - val_accuracy: 0.6403 - val_loss: 0.6851\n",
|
240 |
+
"Epoch 20/100\n",
|
241 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 821us/step - accuracy: 0.6532 - loss: 0.5964 - val_accuracy: 0.6403 - val_loss: 0.6621\n",
|
242 |
+
"Epoch 21/100\n",
|
243 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 894us/step - accuracy: 0.6963 - loss: 0.5668 - val_accuracy: 0.6403 - val_loss: 0.6617\n",
|
244 |
+
"Epoch 22/100\n",
|
245 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 806us/step - accuracy: 0.6953 - loss: 0.5799 - val_accuracy: 0.6187 - val_loss: 0.6875\n",
|
246 |
+
"Epoch 23/100\n",
|
247 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 839us/step - accuracy: 0.6900 - loss: 0.5655 - val_accuracy: 0.6619 - val_loss: 0.6612\n",
|
248 |
+
"Epoch 24/100\n",
|
249 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 800us/step - accuracy: 0.6564 - loss: 0.5771 - val_accuracy: 0.6403 - val_loss: 0.6714\n",
|
250 |
+
"Epoch 25/100\n",
|
251 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 854us/step - accuracy: 0.6492 - loss: 0.5895 - val_accuracy: 0.6403 - val_loss: 0.6660\n",
|
252 |
+
"Epoch 26/100\n",
|
253 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 823us/step - accuracy: 0.6741 - loss: 0.5800 - val_accuracy: 0.6043 - val_loss: 0.6837\n",
|
254 |
+
"Epoch 27/100\n",
|
255 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 981us/step - accuracy: 0.6954 - loss: 0.5519 - val_accuracy: 0.6475 - val_loss: 0.6633\n",
|
256 |
+
"Epoch 28/100\n",
|
257 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 835us/step - accuracy: 0.6696 - loss: 0.6009 - val_accuracy: 0.6403 - val_loss: 0.6640\n",
|
258 |
+
"Epoch 29/100\n",
|
259 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 813us/step - accuracy: 0.7001 - loss: 0.5766 - val_accuracy: 0.6043 - val_loss: 0.6851\n",
|
260 |
+
"Epoch 30/100\n",
|
261 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 859us/step - accuracy: 0.6787 - loss: 0.5600 - val_accuracy: 0.6187 - val_loss: 0.6747\n",
|
262 |
+
"Epoch 31/100\n",
|
263 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 820us/step - accuracy: 0.6745 - loss: 0.5595 - val_accuracy: 0.6403 - val_loss: 0.6796\n",
|
264 |
+
"Epoch 32/100\n",
|
265 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 820us/step - accuracy: 0.6875 - loss: 0.5671 - val_accuracy: 0.6115 - val_loss: 0.6778\n",
|
266 |
+
"Epoch 33/100\n",
|
267 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 875us/step - accuracy: 0.7172 - loss: 0.5561 - val_accuracy: 0.6331 - val_loss: 0.6794\n",
|
268 |
+
"Epoch 34/100\n",
|
269 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 878us/step - accuracy: 0.6928 - loss: 0.5613 - val_accuracy: 0.5971 - val_loss: 0.6941\n",
|
270 |
+
"Epoch 35/100\n",
|
271 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 819us/step - accuracy: 0.6808 - loss: 0.5736 - val_accuracy: 0.6403 - val_loss: 0.6599\n",
|
272 |
+
"Epoch 36/100\n",
|
273 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 828us/step - accuracy: 0.6721 - loss: 0.5741 - val_accuracy: 0.5899 - val_loss: 0.6916\n",
|
274 |
+
"Epoch 37/100\n",
|
275 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 888us/step - accuracy: 0.7092 - loss: 0.5700 - val_accuracy: 0.5971 - val_loss: 0.6824\n",
|
276 |
+
"Epoch 38/100\n",
|
277 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 912us/step - accuracy: 0.6687 - loss: 0.5851 - val_accuracy: 0.6259 - val_loss: 0.6897\n",
|
278 |
+
"Epoch 39/100\n",
|
279 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 851us/step - accuracy: 0.6743 - loss: 0.5730 - val_accuracy: 0.6403 - val_loss: 0.6697\n",
|
280 |
+
"Epoch 40/100\n",
|
281 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 859us/step - accuracy: 0.6599 - loss: 0.5979 - val_accuracy: 0.6259 - val_loss: 0.6921\n",
|
282 |
+
"Epoch 41/100\n",
|
283 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 840us/step - accuracy: 0.7042 - loss: 0.5661 - val_accuracy: 0.6475 - val_loss: 0.6761\n",
|
284 |
+
"Epoch 42/100\n",
|
285 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 859us/step - accuracy: 0.6773 - loss: 0.5497 - val_accuracy: 0.6187 - val_loss: 0.6829\n",
|
286 |
+
"Epoch 43/100\n",
|
287 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 864us/step - accuracy: 0.6886 - loss: 0.5754 - val_accuracy: 0.6475 - val_loss: 0.6664\n",
|
288 |
+
"Epoch 44/100\n",
|
289 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.6558 - loss: 0.5854 - val_accuracy: 0.5755 - val_loss: 0.6825\n",
|
290 |
+
"Epoch 45/100\n",
|
291 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 826us/step - accuracy: 0.6811 - loss: 0.5827 - val_accuracy: 0.6259 - val_loss: 0.6745\n",
|
292 |
+
"Epoch 46/100\n",
|
293 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 819us/step - accuracy: 0.6928 - loss: 0.5798 - val_accuracy: 0.6331 - val_loss: 0.6697\n",
|
294 |
+
"Epoch 47/100\n",
|
295 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 840us/step - accuracy: 0.6635 - loss: 0.5640 - val_accuracy: 0.6259 - val_loss: 0.6800\n",
|
296 |
+
"Epoch 48/100\n",
|
297 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 876us/step - accuracy: 0.7028 - loss: 0.5463 - val_accuracy: 0.6259 - val_loss: 0.6808\n",
|
298 |
+
"Epoch 49/100\n",
|
299 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 863us/step - accuracy: 0.6815 - loss: 0.5471 - val_accuracy: 0.6763 - val_loss: 0.6747\n",
|
300 |
+
"Epoch 50/100\n",
|
301 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 813us/step - accuracy: 0.7056 - loss: 0.5460 - val_accuracy: 0.6043 - val_loss: 0.6732\n",
|
302 |
+
"Epoch 51/100\n",
|
303 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 871us/step - accuracy: 0.6699 - loss: 0.5527 - val_accuracy: 0.6259 - val_loss: 0.6639\n",
|
304 |
+
"Epoch 52/100\n",
|
305 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 851us/step - accuracy: 0.6865 - loss: 0.5431 - val_accuracy: 0.5827 - val_loss: 0.6947\n",
|
306 |
+
"Epoch 53/100\n",
|
307 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 880us/step - accuracy: 0.7055 - loss: 0.5520 - val_accuracy: 0.6691 - val_loss: 0.6790\n",
|
308 |
+
"Epoch 54/100\n",
|
309 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 862us/step - accuracy: 0.6601 - loss: 0.5539 - val_accuracy: 0.6115 - val_loss: 0.6750\n",
|
310 |
+
"Epoch 55/100\n",
|
311 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 892us/step - accuracy: 0.6870 - loss: 0.5535 - val_accuracy: 0.6115 - val_loss: 0.6940\n",
|
312 |
+
"Epoch 56/100\n",
|
313 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 877us/step - accuracy: 0.7203 - loss: 0.5570 - val_accuracy: 0.5971 - val_loss: 0.6825\n",
|
314 |
+
"Epoch 57/100\n",
|
315 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 876us/step - accuracy: 0.6761 - loss: 0.5497 - val_accuracy: 0.6403 - val_loss: 0.6792\n",
|
316 |
+
"Epoch 58/100\n",
|
317 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 914us/step - accuracy: 0.6850 - loss: 0.5713 - val_accuracy: 0.5899 - val_loss: 0.6808\n",
|
318 |
+
"Epoch 59/100\n",
|
319 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 887us/step - accuracy: 0.6847 - loss: 0.5699 - val_accuracy: 0.6331 - val_loss: 0.6751\n",
|
320 |
+
"Epoch 60/100\n",
|
321 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 924us/step - accuracy: 0.6914 - loss: 0.5308 - val_accuracy: 0.6259 - val_loss: 0.6936\n",
|
322 |
+
"Epoch 61/100\n",
|
323 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 923us/step - accuracy: 0.6931 - loss: 0.5340 - val_accuracy: 0.5971 - val_loss: 0.6811\n",
|
324 |
+
"Epoch 62/100\n",
|
325 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 881us/step - accuracy: 0.6754 - loss: 0.5450 - val_accuracy: 0.5971 - val_loss: 0.6735\n",
|
326 |
+
"Epoch 63/100\n",
|
327 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 844us/step - accuracy: 0.6801 - loss: 0.5640 - val_accuracy: 0.6115 - val_loss: 0.6779\n",
|
328 |
+
"Epoch 64/100\n",
|
329 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 857us/step - accuracy: 0.6908 - loss: 0.5368 - val_accuracy: 0.6403 - val_loss: 0.6759\n",
|
330 |
+
"Epoch 65/100\n",
|
331 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 980us/step - accuracy: 0.6560 - loss: 0.5869 - val_accuracy: 0.6403 - val_loss: 0.6796\n",
|
332 |
+
"Epoch 66/100\n",
|
333 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 867us/step - accuracy: 0.6885 - loss: 0.5651 - val_accuracy: 0.5899 - val_loss: 0.6890\n",
|
334 |
+
"Epoch 67/100\n",
|
335 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 865us/step - accuracy: 0.6884 - loss: 0.5416 - val_accuracy: 0.6331 - val_loss: 0.6653\n",
|
336 |
+
"Epoch 68/100\n",
|
337 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 903us/step - accuracy: 0.6798 - loss: 0.5628 - val_accuracy: 0.6619 - val_loss: 0.6721\n",
|
338 |
+
"Epoch 69/100\n",
|
339 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 899us/step - accuracy: 0.7162 - loss: 0.5363 - val_accuracy: 0.6331 - val_loss: 0.6724\n",
|
340 |
+
"Epoch 70/100\n",
|
341 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 866us/step - accuracy: 0.6774 - loss: 0.5539 - val_accuracy: 0.6187 - val_loss: 0.6847\n",
|
342 |
+
"Epoch 71/100\n",
|
343 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 896us/step - accuracy: 0.7058 - loss: 0.5358 - val_accuracy: 0.6187 - val_loss: 0.6825\n",
|
344 |
+
"Epoch 72/100\n",
|
345 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 851us/step - accuracy: 0.6792 - loss: 0.5781 - val_accuracy: 0.6115 - val_loss: 0.6763\n",
|
346 |
+
"Epoch 73/100\n",
|
347 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 901us/step - accuracy: 0.7162 - loss: 0.5427 - val_accuracy: 0.5971 - val_loss: 0.6926\n",
|
348 |
+
"Epoch 74/100\n",
|
349 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 875us/step - accuracy: 0.6971 - loss: 0.5410 - val_accuracy: 0.5971 - val_loss: 0.6893\n",
|
350 |
+
"Epoch 75/100\n",
|
351 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 896us/step - accuracy: 0.6957 - loss: 0.5440 - val_accuracy: 0.6115 - val_loss: 0.6837\n",
|
352 |
+
"Epoch 76/100\n",
|
353 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 878us/step - accuracy: 0.6985 - loss: 0.5571 - val_accuracy: 0.5540 - val_loss: 0.6833\n",
|
354 |
+
"Epoch 77/100\n",
|
355 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 858us/step - accuracy: 0.7319 - loss: 0.5332 - val_accuracy: 0.5971 - val_loss: 0.6736\n",
|
356 |
+
"Epoch 78/100\n",
|
357 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 871us/step - accuracy: 0.6926 - loss: 0.5482 - val_accuracy: 0.6043 - val_loss: 0.6939\n",
|
358 |
+
"Epoch 79/100\n",
|
359 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 945us/step - accuracy: 0.7198 - loss: 0.5172 - val_accuracy: 0.6187 - val_loss: 0.6728\n",
|
360 |
+
"Epoch 80/100\n",
|
361 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 915us/step - accuracy: 0.6939 - loss: 0.5527 - val_accuracy: 0.5971 - val_loss: 0.6927\n",
|
362 |
+
"Epoch 81/100\n",
|
363 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 820us/step - accuracy: 0.7257 - loss: 0.5143 - val_accuracy: 0.6475 - val_loss: 0.6905\n",
|
364 |
+
"Epoch 82/100\n",
|
365 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 797us/step - accuracy: 0.7362 - loss: 0.5186 - val_accuracy: 0.5468 - val_loss: 0.7176\n",
|
366 |
+
"Epoch 83/100\n",
|
367 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 826us/step - accuracy: 0.6970 - loss: 0.5480 - val_accuracy: 0.6043 - val_loss: 0.6709\n",
|
368 |
+
"Epoch 84/100\n",
|
369 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 802us/step - accuracy: 0.6887 - loss: 0.5634 - val_accuracy: 0.6043 - val_loss: 0.6917\n",
|
370 |
+
"Epoch 85/100\n",
|
371 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━���━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 817us/step - accuracy: 0.7044 - loss: 0.5404 - val_accuracy: 0.5827 - val_loss: 0.7027\n",
|
372 |
+
"Epoch 86/100\n",
|
373 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 853us/step - accuracy: 0.7029 - loss: 0.5226 - val_accuracy: 0.5755 - val_loss: 0.6922\n",
|
374 |
+
"Epoch 87/100\n",
|
375 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 797us/step - accuracy: 0.7021 - loss: 0.5481 - val_accuracy: 0.5683 - val_loss: 0.7086\n",
|
376 |
+
"Epoch 88/100\n",
|
377 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 810us/step - accuracy: 0.6886 - loss: 0.5334 - val_accuracy: 0.6187 - val_loss: 0.6981\n",
|
378 |
+
"Epoch 89/100\n",
|
379 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 803us/step - accuracy: 0.7225 - loss: 0.5191 - val_accuracy: 0.5755 - val_loss: 0.6921\n",
|
380 |
+
"Epoch 90/100\n",
|
381 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 846us/step - accuracy: 0.7311 - loss: 0.5138 - val_accuracy: 0.5755 - val_loss: 0.6973\n",
|
382 |
+
"Epoch 91/100\n",
|
383 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 814us/step - accuracy: 0.7425 - loss: 0.5038 - val_accuracy: 0.5612 - val_loss: 0.7220\n",
|
384 |
+
"Epoch 92/100\n",
|
385 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 809us/step - accuracy: 0.6943 - loss: 0.5257 - val_accuracy: 0.6043 - val_loss: 0.6896\n",
|
386 |
+
"Epoch 93/100\n",
|
387 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 806us/step - accuracy: 0.6973 - loss: 0.5225 - val_accuracy: 0.5899 - val_loss: 0.6951\n",
|
388 |
+
"Epoch 94/100\n",
|
389 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 824us/step - accuracy: 0.6944 - loss: 0.5219 - val_accuracy: 0.5971 - val_loss: 0.6913\n",
|
390 |
+
"Epoch 95/100\n",
|
391 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 805us/step - accuracy: 0.7329 - loss: 0.5238 - val_accuracy: 0.5827 - val_loss: 0.7017\n",
|
392 |
+
"Epoch 96/100\n",
|
393 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 833us/step - accuracy: 0.6984 - loss: 0.5337 - val_accuracy: 0.5755 - val_loss: 0.6819\n",
|
394 |
+
"Epoch 97/100\n",
|
395 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 825us/step - accuracy: 0.7147 - loss: 0.5203 - val_accuracy: 0.5899 - val_loss: 0.6892\n",
|
396 |
+
"Epoch 98/100\n",
|
397 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 878us/step - accuracy: 0.6892 - loss: 0.5300 - val_accuracy: 0.5899 - val_loss: 0.7167\n",
|
398 |
+
"Epoch 99/100\n",
|
399 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 879us/step - accuracy: 0.7202 - loss: 0.5175 - val_accuracy: 0.6115 - val_loss: 0.6922\n",
|
400 |
+
"Epoch 100/100\n",
|
401 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 820us/step - accuracy: 0.7134 - loss: 0.5336 - val_accuracy: 0.5971 - val_loss: 0.7082\n"
|
402 |
+
]
|
403 |
+
}
|
404 |
+
],
|
405 |
+
"source": [
|
406 |
+
"model = Sequential([\n",
|
407 |
+
" Conv1D(filters=32, kernel_size=3, activation='relu', input_shape=(X_train.shape[1], 1)),\n",
|
408 |
+
" Conv1D(filters=64, kernel_size=3, activation='relu'),\n",
|
409 |
+
" Dropout(0.10),\n",
|
410 |
+
" Flatten(),\n",
|
411 |
+
" Dense(128, activation='relu'),\n",
|
412 |
+
" Dense(y_train.shape[1], activation='softmax')\n",
|
413 |
+
"])\n",
|
414 |
+
"\n",
|
415 |
+
"model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])\n",
|
416 |
+
"\n",
|
417 |
+
"history = model.fit(X_train, y_train, epochs=100, validation_split=0.2)"
|
418 |
+
]
|
419 |
+
},
|
420 |
+
{
|
421 |
+
"cell_type": "code",
|
422 |
+
"execution_count": 8,
|
423 |
+
"id": "0788ebb8-757f-4180-af39-603f61762b95",
|
424 |
+
"metadata": {},
|
425 |
+
"outputs": [
|
426 |
+
{
|
427 |
+
"name": "stdout",
|
428 |
+
"output_type": "stream",
|
429 |
+
"text": [
|
430 |
+
"\u001b[1m3/3\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - accuracy: 0.6268 - loss: 0.7269 \n",
|
431 |
+
"Test Accuracy: 63.64%\n"
|
432 |
+
]
|
433 |
+
}
|
434 |
+
],
|
435 |
+
"source": [
|
436 |
+
"# Evaluate the model\n",
|
437 |
+
"test_loss, test_acc = model.evaluate(X_test, y_test)\n",
|
438 |
+
"print(f\"Test Accuracy: {test_acc * 100:.2f}%\")"
|
439 |
+
]
|
440 |
+
},
|
441 |
+
{
|
442 |
+
"cell_type": "code",
|
443 |
+
"execution_count": 9,
|
444 |
+
"id": "f74da01a-3768-4101-9a06-0650872e533e",
|
445 |
+
"metadata": {},
|
446 |
+
"outputs": [
|
447 |
+
{
|
448 |
+
"data": {
|
449 |
+
"text/html": [
|
450 |
+
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">Model: \"sequential\"</span>\n",
|
451 |
+
"</pre>\n"
|
452 |
+
],
|
453 |
+
"text/plain": [
|
454 |
+
"\u001b[1mModel: \"sequential\"\u001b[0m\n"
|
455 |
+
]
|
456 |
+
},
|
457 |
+
"metadata": {},
|
458 |
+
"output_type": "display_data"
|
459 |
+
},
|
460 |
+
{
|
461 |
+
"data": {
|
462 |
+
"text/html": [
|
463 |
+
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
|
464 |
+
"┃<span style=\"font-weight: bold\"> Layer (type) </span>┃<span style=\"font-weight: bold\"> Output Shape </span>┃<span style=\"font-weight: bold\"> Param # </span>┃\n",
|
465 |
+
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
|
466 |
+
"│ conv1d (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv1D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">4</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span> │\n",
|
467 |
+
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
468 |
+
"│ conv1d_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv1D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">2</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">6,208</span> │\n",
|
469 |
+
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
470 |
+
"│ dropout (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dropout</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">2</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
|
471 |
+
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
472 |
+
"│ flatten (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Flatten</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
|
473 |
+
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
474 |
+
"│ dense (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">16,512</span> │\n",
|
475 |
+
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
476 |
+
"��� dense_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">2</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">258</span> │\n",
|
477 |
+
"└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
|
478 |
+
"</pre>\n"
|
479 |
+
],
|
480 |
+
"text/plain": [
|
481 |
+
"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
|
482 |
+
"┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n",
|
483 |
+
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
|
484 |
+
"│ conv1d (\u001b[38;5;33mConv1D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m128\u001b[0m │\n",
|
485 |
+
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
486 |
+
"│ conv1d_1 (\u001b[38;5;33mConv1D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m2\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m6,208\u001b[0m │\n",
|
487 |
+
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
488 |
+
"│ dropout (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m2\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
|
489 |
+
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
490 |
+
"│ flatten (\u001b[38;5;33mFlatten\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
|
491 |
+
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
492 |
+
"│ dense (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m16,512\u001b[0m │\n",
|
493 |
+
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
494 |
+
"│ dense_1 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m2\u001b[0m) │ \u001b[38;5;34m258\u001b[0m │\n",
|
495 |
+
"└─────────────────────────────────┴────────────────────────┴───────────────┘\n"
|
496 |
+
]
|
497 |
+
},
|
498 |
+
"metadata": {},
|
499 |
+
"output_type": "display_data"
|
500 |
+
},
|
501 |
+
{
|
502 |
+
"data": {
|
503 |
+
"text/html": [
|
504 |
+
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Total params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">69,320</span> (270.79 KB)\n",
|
505 |
+
"</pre>\n"
|
506 |
+
],
|
507 |
+
"text/plain": [
|
508 |
+
"\u001b[1m Total params: \u001b[0m\u001b[38;5;34m69,320\u001b[0m (270.79 KB)\n"
|
509 |
+
]
|
510 |
+
},
|
511 |
+
"metadata": {},
|
512 |
+
"output_type": "display_data"
|
513 |
+
},
|
514 |
+
{
|
515 |
+
"data": {
|
516 |
+
"text/html": [
|
517 |
+
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">23,106</span> (90.26 KB)\n",
|
518 |
+
"</pre>\n"
|
519 |
+
],
|
520 |
+
"text/plain": [
|
521 |
+
"\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m23,106\u001b[0m (90.26 KB)\n"
|
522 |
+
]
|
523 |
+
},
|
524 |
+
"metadata": {},
|
525 |
+
"output_type": "display_data"
|
526 |
+
},
|
527 |
+
{
|
528 |
+
"data": {
|
529 |
+
"text/html": [
|
530 |
+
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Non-trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (0.00 B)\n",
|
531 |
+
"</pre>\n"
|
532 |
+
],
|
533 |
+
"text/plain": [
|
534 |
+
"\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n"
|
535 |
+
]
|
536 |
+
},
|
537 |
+
"metadata": {},
|
538 |
+
"output_type": "display_data"
|
539 |
+
},
|
540 |
+
{
|
541 |
+
"data": {
|
542 |
+
"text/html": [
|
543 |
+
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Optimizer params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">46,214</span> (180.53 KB)\n",
|
544 |
+
"</pre>\n"
|
545 |
+
],
|
546 |
+
"text/plain": [
|
547 |
+
"\u001b[1m Optimizer params: \u001b[0m\u001b[38;5;34m46,214\u001b[0m (180.53 KB)\n"
|
548 |
+
]
|
549 |
+
},
|
550 |
+
"metadata": {},
|
551 |
+
"output_type": "display_data"
|
552 |
+
},
|
553 |
+
{
|
554 |
+
"data": {
|
555 |
+
"image/png": "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EZkUBjdERERkUhjcEBERkUlhcENEREQmhcENERERmRQGN0RERGRSGNwQERGRSWFwQ0RERCaFwQ0RERGZFAY3REREZFIY3BAREZFJYXBDREREJoXBDREREZkUBjdERERkUhjcEBERkUlhcENEREQmhcENERERmRQGN0RERGRSGNwQERGRSWFwQ0RERCaFwQ0RERGZFAY3REREZFIY3BAREZFJYXBDREREJoXBDREREZkUBjdERERkUhjcEBERkUlhcENEREQmhcENERERmRQGN0RERGRSGNwQERGRSWFwQ0RERCaFwQ0RERGZFAY3REREZFIY3BAREZFJYXBDREREJoXBDREREZkUBjdERERkUhjcEBERkUlhcENEREQmhcENERERmRQGN0RERGRSqkRws3z5cvj5+cHa2hrBwcGIiIgodt1Vq1ahc+fOcHJygpOTE0JDQ0tcn4iIiP5bjB7cbNq0CTNmzMD8+fNx5swZBAYGonfv3khISChy/QMHDmDo0KHYv38/wsPD4evri2eeeQb37t2r5JITERFRVSSTJEkyZgGCg4PRtm1bLFu2DACgVCrh6+uLKVOmYNasWU/dXqFQwMnJCcuWLcPIkSOfun5aWhocHR2RmpoKBweHcpefiIiIKp4+12+j1tzk5ubi9OnTCA0NVS+Ty+UIDQ1FeHh4qfbx+PFj5OXlwdnZucjXc3JykJaWpvMgIiIi02XU4CYpKQkKhQIeHh46yz08PBAXF1eqfcycORPe3t46AZK2xYsXw9HRUf3w9fUtd7mJiIio6jJ6zk15fPrpp9i4cSO2bdsGa2vrIteZPXs2UlNT1Y/Y2NhKLiURERFVJnNjHtzV1RVmZmaIj4/XWR4fHw9PT88St/3iiy/w6aefYu/evWjRokWx61lZWcHKysog5SUiIqKqz6g1N5aWlggKCkJYWJh6mVKpRFhYGEJCQord7rPPPsNHH32EXbt2oU2bNpVRVCIiIqomjFpzAwAzZszAqFGj0KZNG7Rr1w5LlixBZmYmxowZAwAYOXIkfHx8sHjxYgDA//3f/2HevHlYv349/Pz81Lk59vb2sLe3N9r7ICIioqrB6MHN4MGDkZiYiHnz5iEuLg4tW7bErl271EnGMTExkMs1FUwrVqxAbm4uXnrpJZ39zJ8/HwsWLKjMohMREVEVZPRxbiobx7khIiKqfqrN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",
|
556 |
+
"text/plain": [
|
557 |
+
"<Figure size 640x480 with 1 Axes>"
|
558 |
+
]
|
559 |
+
},
|
560 |
+
"metadata": {},
|
561 |
+
"output_type": "display_data"
|
562 |
+
}
|
563 |
+
],
|
564 |
+
"source": [
|
565 |
+
"model.summary()\n",
|
566 |
+
"\n",
|
567 |
+
"import matplotlib.pyplot as plt\n",
|
568 |
+
"\n",
|
569 |
+
"plt.plot(history.history['accuracy'], label='Accuracy')\n",
|
570 |
+
"plt.plot(history.history['val_accuracy'], label='Validation Accuracy')\n",
|
571 |
+
"plt.xlabel('Epoch')\n",
|
572 |
+
"plt.ylabel('Accuracy')\n",
|
573 |
+
"plt.ylim([0, 1])\n",
|
574 |
+
"plt.legend(loc='lower right')\n",
|
575 |
+
"plt.show()"
|
576 |
+
]
|
577 |
+
},
|
578 |
+
{
|
579 |
+
"cell_type": "code",
|
580 |
+
"execution_count": 10,
|
581 |
+
"id": "9c29a12b-9fda-49b3-bd85-fa699e1f61a2",
|
582 |
+
"metadata": {},
|
583 |
+
"outputs": [],
|
584 |
+
"source": [
|
585 |
+
"model.save('patient_outcome_classifier.keras')"
|
586 |
+
]
|
587 |
+
}
|
588 |
+
],
|
589 |
+
"metadata": {
|
590 |
+
"kernelspec": {
|
591 |
+
"display_name": "Python 3 (ipykernel)",
|
592 |
+
"language": "python",
|
593 |
+
"name": "python3"
|
594 |
+
},
|
595 |
+
"language_info": {
|
596 |
+
"codemirror_mode": {
|
597 |
+
"name": "ipython",
|
598 |
+
"version": 3
|
599 |
+
},
|
600 |
+
"file_extension": ".py",
|
601 |
+
"mimetype": "text/x-python",
|
602 |
+
"name": "python",
|
603 |
+
"nbconvert_exporter": "python",
|
604 |
+
"pygments_lexer": "ipython3",
|
605 |
+
"version": "3.12.3"
|
606 |
+
}
|
607 |
+
},
|
608 |
+
"nbformat": 4,
|
609 |
+
"nbformat_minor": 5
|
610 |
+
}
|
.python-version
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
3.12.3
|
49719_AV.wav
ADDED
Binary file (242 kB). View file
|
|
app.py
CHANGED
@@ -6,6 +6,8 @@ import pandas as pd
|
|
6 |
|
7 |
from transformers import pipeline
|
8 |
|
|
|
|
|
9 |
|
10 |
def get_murmur_from_recordings(audio):
|
11 |
pipe = pipeline("audio-classification",
|
@@ -76,7 +78,7 @@ def predict(audio, age, sex, height, weight, is_pregnant):
|
|
76 |
demo = gr.Interface(
|
77 |
fn=predict,
|
78 |
inputs=[
|
79 |
-
"
|
80 |
gr.Radio(label="Age", choices=[
|
81 |
"Neonate", "Infant", "Child", "Adolescent"],
|
82 |
value="Adolescent"),
|
@@ -85,6 +87,11 @@ demo = gr.Interface(
|
|
85 |
gr.Number(label="Weight", value="38.1"),
|
86 |
gr.Checkbox(label="Pregnant", value=False)
|
87 |
],
|
88 |
-
outputs="label"
|
|
|
|
|
|
|
|
|
|
|
89 |
)
|
90 |
demo.launch()
|
|
|
6 |
|
7 |
from transformers import pipeline
|
8 |
|
9 |
+
from examples import normal, abnormal
|
10 |
+
|
11 |
|
12 |
def get_murmur_from_recordings(audio):
|
13 |
pipe = pipeline("audio-classification",
|
|
|
78 |
demo = gr.Interface(
|
79 |
fn=predict,
|
80 |
inputs=[
|
81 |
+
gr.Audio(label="Recording"),
|
82 |
gr.Radio(label="Age", choices=[
|
83 |
"Neonate", "Infant", "Child", "Adolescent"],
|
84 |
value="Adolescent"),
|
|
|
87 |
gr.Number(label="Weight", value="38.1"),
|
88 |
gr.Checkbox(label="Pregnant", value=False)
|
89 |
],
|
90 |
+
outputs="label",
|
91 |
+
cache_examples=True,
|
92 |
+
examples=[
|
93 |
+
normal,
|
94 |
+
abnormal,
|
95 |
+
],
|
96 |
)
|
97 |
demo.launch()
|
csv_classification.ipynb
ADDED
@@ -0,0 +1,610 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 1,
|
6 |
+
"id": "be5e2cf3-4e08-4dda-b5e9-42cc43821aee",
|
7 |
+
"metadata": {},
|
8 |
+
"outputs": [],
|
9 |
+
"source": [
|
10 |
+
"import os\n",
|
11 |
+
"import glob\n",
|
12 |
+
"import numpy as np\n",
|
13 |
+
"from tqdm import tqdm\n",
|
14 |
+
"import itertools\n",
|
15 |
+
"import matplotlib.pyplot as plt\n",
|
16 |
+
"from sklearn.model_selection import train_test_split\n",
|
17 |
+
"from sklearn.metrics import classification_report, accuracy_score, confusion_matrix\n",
|
18 |
+
"from sklearn.preprocessing import LabelEncoder\n",
|
19 |
+
"from sklearn.utils import shuffle\n",
|
20 |
+
"from sklearn.utils import class_weight\n",
|
21 |
+
"import keras\n",
|
22 |
+
"from keras.models import Sequential\n",
|
23 |
+
"from keras.layers import Dense, Dropout, Activation, Flatten\n",
|
24 |
+
"from keras.layers import Convolution2D, Conv2D, MaxPooling2D, GlobalAveragePooling2D\n",
|
25 |
+
"from keras.utils import to_categorical\n",
|
26 |
+
"import numpy as np\n",
|
27 |
+
"import tensorflow as tf\n",
|
28 |
+
"from tensorflow.keras.models import Sequential\n",
|
29 |
+
"from tensorflow.keras.layers import Dense, Conv1D, Flatten, Dropout\n",
|
30 |
+
"from tensorflow.keras.utils import to_categorical\n",
|
31 |
+
"from sklearn.model_selection import train_test_split\n",
|
32 |
+
"from sklearn.preprocessing import StandardScaler\n",
|
33 |
+
"import warnings\n",
|
34 |
+
"warnings.filterwarnings('ignore', category=FutureWarning)\n",
|
35 |
+
"import matplotlib.pyplot as plt\n",
|
36 |
+
"import zipfile\n",
|
37 |
+
"from IPython.display import clear_output\n",
|
38 |
+
"import glob\n",
|
39 |
+
"import pandas as pd\n",
|
40 |
+
"import os"
|
41 |
+
]
|
42 |
+
},
|
43 |
+
{
|
44 |
+
"cell_type": "code",
|
45 |
+
"execution_count": 3,
|
46 |
+
"id": "0a41fca8-0f28-461f-98a6-6314d41481f3",
|
47 |
+
"metadata": {},
|
48 |
+
"outputs": [
|
49 |
+
{
|
50 |
+
"name": "stdout",
|
51 |
+
"output_type": "stream",
|
52 |
+
"text": [
|
53 |
+
" Age Sex Height Weight Pregnancy status Murmur Outcome\n",
|
54 |
+
"0 2 1 0.434483 0.125346 0 0 1\n",
|
55 |
+
"1 2 1 0.468966 0.099539 0 1 1\n",
|
56 |
+
"3 2 0 0.434483 0.125346 0 1 1\n",
|
57 |
+
"4 2 0 0.358621 0.082028 0 1 1\n",
|
58 |
+
"6 2 1 0.393103 0.107834 0 0 1\n",
|
59 |
+
"Number of data sample rows: 759\n"
|
60 |
+
]
|
61 |
+
}
|
62 |
+
],
|
63 |
+
"source": [
|
64 |
+
"from numpy import nan\n",
|
65 |
+
"from sklearn.preprocessing import MinMaxScaler\n",
|
66 |
+
"df = pd.read_csv(os.path.join('training_data.csv'))\n",
|
67 |
+
"\n",
|
68 |
+
"# Now drop the columns\n",
|
69 |
+
"columns_to_drop = [\n",
|
70 |
+
" \"Patient ID\", \"Recording locations\", \"Murmur locations\", \"Most audible location\",\n",
|
71 |
+
" \"Systolic murmur timing\", \"Systolic murmur shape\", \"Systolic murmur grading\",\n",
|
72 |
+
" \"Systolic murmur pitch\", \"Systolic murmur quality\", \"Diastolic murmur timing\",\n",
|
73 |
+
" \"Diastolic murmur shape\", \"Diastolic murmur grading\", \"Diastolic murmur pitch\",\n",
|
74 |
+
" \"Diastolic murmur quality\", \"Campaign\", \"Additional ID\", \"Recording locations:\",\n",
|
75 |
+
"]\n",
|
76 |
+
"df.drop(columns=columns_to_drop, inplace=True, errors='ignore')\n",
|
77 |
+
"\n",
|
78 |
+
"scaler = MinMaxScaler()\n",
|
79 |
+
"columns_to_normalize = ['Weight', 'Height']\n",
|
80 |
+
"data_to_normalize = df[columns_to_normalize]\n",
|
81 |
+
"normalized_data = scaler.fit_transform(data_to_normalize)\n",
|
82 |
+
"df_normalized = pd.DataFrame(normalized_data, columns=columns_to_normalize)\n",
|
83 |
+
"df[columns_to_normalize] = df_normalized\n",
|
84 |
+
"\n",
|
85 |
+
"\n",
|
86 |
+
"df['Pregnancy status'] = df['Pregnancy status'].apply(lambda x: 1 if x else 0)\n",
|
87 |
+
"sex2int = {'Male': 0, 'Female': 1}\n",
|
88 |
+
"df['Sex'] = df['Sex'].apply(lambda x: sex2int[x] if x in sex2int else -1)\n",
|
89 |
+
"df = df[df['Sex'] != -1]\n",
|
90 |
+
"\n",
|
91 |
+
"age2int = {'Neonate': 0, 'Infant': 1, 'Child': 2, 'Adolescent': 3}\n",
|
92 |
+
"df['Age'] = df['Age'].apply(lambda x: age2int[x] if x in age2int else -1)\n",
|
93 |
+
"df = df[df['Age'] != -1]\n",
|
94 |
+
"\n",
|
95 |
+
"df = df[df['Murmur'] != 'Unknown']\n",
|
96 |
+
"df['Murmur'] = df['Murmur'].apply(lambda x: 0 if x == 'Absent' else (1 if x == 'Present' else 2))\n",
|
97 |
+
"\n",
|
98 |
+
"outcome2int = {'Normal': 0, 'Abnormal': 1}\n",
|
99 |
+
"df['Outcome'] = df['Outcome'].apply(lambda x: outcome2int[x] if x in outcome2int else -1)\n",
|
100 |
+
"df = df[df['Outcome'] != -1]\n",
|
101 |
+
"\n",
|
102 |
+
"df = df.select_dtypes(include=[np.number])\n",
|
103 |
+
"df.dropna(inplace=True)\n",
|
104 |
+
"\n",
|
105 |
+
"\n",
|
106 |
+
"print(df.head())\n",
|
107 |
+
"print(\"Number of data sample rows:\", df.shape[0])"
|
108 |
+
]
|
109 |
+
},
|
110 |
+
{
|
111 |
+
"cell_type": "code",
|
112 |
+
"execution_count": 6,
|
113 |
+
"id": "499b212d-8acb-4ce5-a1e1-ec62d9f1142b",
|
114 |
+
"metadata": {},
|
115 |
+
"outputs": [
|
116 |
+
{
|
117 |
+
"name": "stdout",
|
118 |
+
"output_type": "stream",
|
119 |
+
"text": [
|
120 |
+
" Age Sex Height Weight Pregnancy status Murmur Outcome\n",
|
121 |
+
"0 2 1 0.446520 0.118830 0 0 1\n",
|
122 |
+
"1 2 1 0.457870 0.120511 0 1 1\n",
|
123 |
+
"2 2 0 0.423518 0.131510 0 1 1\n",
|
124 |
+
"3 2 0 0.356813 0.071461 0 1 1\n",
|
125 |
+
"4 2 1 0.396024 0.102232 0 0 1\n",
|
126 |
+
"Number of data sample rows after SMOTE: 768\n",
|
127 |
+
"Example input\n",
|
128 |
+
" Age 2.00000\n",
|
129 |
+
"Sex 1.00000\n",
|
130 |
+
"Height 0.44652\n",
|
131 |
+
"Weight 0.11883\n",
|
132 |
+
"Pregnancy status 0.00000\n",
|
133 |
+
"Murmur 0.00000\n",
|
134 |
+
"Name: 0, dtype: float64\n"
|
135 |
+
]
|
136 |
+
}
|
137 |
+
],
|
138 |
+
"source": [
|
139 |
+
"import pandas as pd\n",
|
140 |
+
"import numpy as np\n",
|
141 |
+
"from sklearn.preprocessing import MinMaxScaler, StandardScaler\n",
|
142 |
+
"from sklearn.model_selection import train_test_split\n",
|
143 |
+
"from tensorflow.keras.utils import to_categorical\n",
|
144 |
+
"from sklearn.utils import resample\n",
|
145 |
+
"from imblearn.over_sampling import SMOTE\n",
|
146 |
+
"\n",
|
147 |
+
"\n",
|
148 |
+
"noise_scale = 0.01\n",
|
149 |
+
"\n",
|
150 |
+
"numerical_cols = ['Weight', 'Height']\n",
|
151 |
+
"for col in numerical_cols:\n",
|
152 |
+
" df[col] += np.random.normal(loc=0.0, scale=noise_scale, size=df[col].shape)\n",
|
153 |
+
"\n",
|
154 |
+
"# Apply SMOTE for data aug\n",
|
155 |
+
"smote = SMOTE()\n",
|
156 |
+
"X = df.drop('Outcome', axis=1)\n",
|
157 |
+
"y = df['Outcome']\n",
|
158 |
+
"\n",
|
159 |
+
"X_sm, y_sm = smote.fit_resample(X, y)\n",
|
160 |
+
"df_sm = pd.DataFrame(X_sm, columns=X.columns)\n",
|
161 |
+
"df_sm['Outcome'] = y_sm\n",
|
162 |
+
"\n",
|
163 |
+
"\n",
|
164 |
+
"scaler = StandardScaler()\n",
|
165 |
+
"X_scaled = scaler.fit_transform(df_sm.drop('Outcome', axis=1))\n",
|
166 |
+
"X_scaled = X_scaled.reshape(X_scaled.shape[0], X_scaled.shape[1], 1)\n",
|
167 |
+
"y_encoded = to_categorical(df_sm['Outcome'])\n",
|
168 |
+
"\n",
|
169 |
+
"# Split data into training and test sets\n",
|
170 |
+
"X_train, X_test, y_train, y_test = train_test_split(X_scaled, y_encoded, test_size=0.1, random_state=42)\n",
|
171 |
+
"\n",
|
172 |
+
"# augmented data\n",
|
173 |
+
"print(df_sm.head())\n",
|
174 |
+
"print(\"Number of data sample rows after SMOTE:\", df_sm.shape[0])\n",
|
175 |
+
"print(\"Example input\\n\", df_sm.drop('Outcome', axis=1).loc[0])"
|
176 |
+
]
|
177 |
+
},
|
178 |
+
{
|
179 |
+
"cell_type": "code",
|
180 |
+
"execution_count": 7,
|
181 |
+
"id": "9a680377-7bdd-4da6-8c5b-eb9fb1336250",
|
182 |
+
"metadata": {},
|
183 |
+
"outputs": [
|
184 |
+
{
|
185 |
+
"name": "stdout",
|
186 |
+
"output_type": "stream",
|
187 |
+
"text": [
|
188 |
+
"Epoch 1/100\n"
|
189 |
+
]
|
190 |
+
},
|
191 |
+
{
|
192 |
+
"name": "stderr",
|
193 |
+
"output_type": "stream",
|
194 |
+
"text": [
|
195 |
+
"/Users/cogniveon/src/HeartMurmurClassification/.venv/lib/python3.12/site-packages/keras/src/layers/convolutional/base_conv.py:107: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n",
|
196 |
+
" super().__init__(activity_regularizer=activity_regularizer, **kwargs)\n"
|
197 |
+
]
|
198 |
+
},
|
199 |
+
{
|
200 |
+
"name": "stdout",
|
201 |
+
"output_type": "stream",
|
202 |
+
"text": [
|
203 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.5140 - loss: 0.6888 - val_accuracy: 0.6403 - val_loss: 0.6672\n",
|
204 |
+
"Epoch 2/100\n",
|
205 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 758us/step - accuracy: 0.6529 - loss: 0.6446 - val_accuracy: 0.6547 - val_loss: 0.6523\n",
|
206 |
+
"Epoch 3/100\n",
|
207 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 757us/step - accuracy: 0.6820 - loss: 0.5970 - val_accuracy: 0.6835 - val_loss: 0.6649\n",
|
208 |
+
"Epoch 4/100\n",
|
209 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 830us/step - accuracy: 0.6451 - loss: 0.6134 - val_accuracy: 0.6547 - val_loss: 0.6601\n",
|
210 |
+
"Epoch 5/100\n",
|
211 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - accuracy: 0.6527 - loss: 0.6077 - val_accuracy: 0.6475 - val_loss: 0.6574\n",
|
212 |
+
"Epoch 6/100\n",
|
213 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 875us/step - accuracy: 0.6605 - loss: 0.6117 - val_accuracy: 0.6187 - val_loss: 0.6709\n",
|
214 |
+
"Epoch 7/100\n",
|
215 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 822us/step - accuracy: 0.6460 - loss: 0.6094 - val_accuracy: 0.6259 - val_loss: 0.6673\n",
|
216 |
+
"Epoch 8/100\n",
|
217 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 827us/step - accuracy: 0.6691 - loss: 0.6166 - val_accuracy: 0.6331 - val_loss: 0.6621\n",
|
218 |
+
"Epoch 9/100\n",
|
219 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 809us/step - accuracy: 0.6584 - loss: 0.5825 - val_accuracy: 0.6403 - val_loss: 0.6667\n",
|
220 |
+
"Epoch 10/100\n",
|
221 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 860us/step - accuracy: 0.6752 - loss: 0.5976 - val_accuracy: 0.6187 - val_loss: 0.6591\n",
|
222 |
+
"Epoch 11/100\n",
|
223 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 807us/step - accuracy: 0.6603 - loss: 0.6061 - val_accuracy: 0.6187 - val_loss: 0.6664\n",
|
224 |
+
"Epoch 12/100\n",
|
225 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 845us/step - accuracy: 0.6561 - loss: 0.5776 - val_accuracy: 0.6259 - val_loss: 0.6739\n",
|
226 |
+
"Epoch 13/100\n",
|
227 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 817us/step - accuracy: 0.6700 - loss: 0.5976 - val_accuracy: 0.5971 - val_loss: 0.6730\n",
|
228 |
+
"Epoch 14/100\n",
|
229 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 919us/step - accuracy: 0.6622 - loss: 0.5886 - val_accuracy: 0.6475 - val_loss: 0.6471\n",
|
230 |
+
"Epoch 15/100\n",
|
231 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 901us/step - accuracy: 0.6307 - loss: 0.6162 - val_accuracy: 0.6259 - val_loss: 0.6728\n",
|
232 |
+
"Epoch 16/100\n",
|
233 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.7153 - loss: 0.5660 - val_accuracy: 0.6187 - val_loss: 0.6775\n",
|
234 |
+
"Epoch 17/100\n",
|
235 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 862us/step - accuracy: 0.6509 - loss: 0.5898 - val_accuracy: 0.6547 - val_loss: 0.6607\n",
|
236 |
+
"Epoch 18/100\n",
|
237 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 827us/step - accuracy: 0.6680 - loss: 0.5865 - val_accuracy: 0.6115 - val_loss: 0.6673\n",
|
238 |
+
"Epoch 19/100\n",
|
239 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 805us/step - accuracy: 0.7013 - loss: 0.5647 - val_accuracy: 0.6403 - val_loss: 0.6851\n",
|
240 |
+
"Epoch 20/100\n",
|
241 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 821us/step - accuracy: 0.6532 - loss: 0.5964 - val_accuracy: 0.6403 - val_loss: 0.6621\n",
|
242 |
+
"Epoch 21/100\n",
|
243 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 894us/step - accuracy: 0.6963 - loss: 0.5668 - val_accuracy: 0.6403 - val_loss: 0.6617\n",
|
244 |
+
"Epoch 22/100\n",
|
245 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 806us/step - accuracy: 0.6953 - loss: 0.5799 - val_accuracy: 0.6187 - val_loss: 0.6875\n",
|
246 |
+
"Epoch 23/100\n",
|
247 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 839us/step - accuracy: 0.6900 - loss: 0.5655 - val_accuracy: 0.6619 - val_loss: 0.6612\n",
|
248 |
+
"Epoch 24/100\n",
|
249 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 800us/step - accuracy: 0.6564 - loss: 0.5771 - val_accuracy: 0.6403 - val_loss: 0.6714\n",
|
250 |
+
"Epoch 25/100\n",
|
251 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 854us/step - accuracy: 0.6492 - loss: 0.5895 - val_accuracy: 0.6403 - val_loss: 0.6660\n",
|
252 |
+
"Epoch 26/100\n",
|
253 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 823us/step - accuracy: 0.6741 - loss: 0.5800 - val_accuracy: 0.6043 - val_loss: 0.6837\n",
|
254 |
+
"Epoch 27/100\n",
|
255 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 981us/step - accuracy: 0.6954 - loss: 0.5519 - val_accuracy: 0.6475 - val_loss: 0.6633\n",
|
256 |
+
"Epoch 28/100\n",
|
257 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 835us/step - accuracy: 0.6696 - loss: 0.6009 - val_accuracy: 0.6403 - val_loss: 0.6640\n",
|
258 |
+
"Epoch 29/100\n",
|
259 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 813us/step - accuracy: 0.7001 - loss: 0.5766 - val_accuracy: 0.6043 - val_loss: 0.6851\n",
|
260 |
+
"Epoch 30/100\n",
|
261 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 859us/step - accuracy: 0.6787 - loss: 0.5600 - val_accuracy: 0.6187 - val_loss: 0.6747\n",
|
262 |
+
"Epoch 31/100\n",
|
263 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 820us/step - accuracy: 0.6745 - loss: 0.5595 - val_accuracy: 0.6403 - val_loss: 0.6796\n",
|
264 |
+
"Epoch 32/100\n",
|
265 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 820us/step - accuracy: 0.6875 - loss: 0.5671 - val_accuracy: 0.6115 - val_loss: 0.6778\n",
|
266 |
+
"Epoch 33/100\n",
|
267 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 875us/step - accuracy: 0.7172 - loss: 0.5561 - val_accuracy: 0.6331 - val_loss: 0.6794\n",
|
268 |
+
"Epoch 34/100\n",
|
269 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 878us/step - accuracy: 0.6928 - loss: 0.5613 - val_accuracy: 0.5971 - val_loss: 0.6941\n",
|
270 |
+
"Epoch 35/100\n",
|
271 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 819us/step - accuracy: 0.6808 - loss: 0.5736 - val_accuracy: 0.6403 - val_loss: 0.6599\n",
|
272 |
+
"Epoch 36/100\n",
|
273 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 828us/step - accuracy: 0.6721 - loss: 0.5741 - val_accuracy: 0.5899 - val_loss: 0.6916\n",
|
274 |
+
"Epoch 37/100\n",
|
275 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 888us/step - accuracy: 0.7092 - loss: 0.5700 - val_accuracy: 0.5971 - val_loss: 0.6824\n",
|
276 |
+
"Epoch 38/100\n",
|
277 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 912us/step - accuracy: 0.6687 - loss: 0.5851 - val_accuracy: 0.6259 - val_loss: 0.6897\n",
|
278 |
+
"Epoch 39/100\n",
|
279 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 851us/step - accuracy: 0.6743 - loss: 0.5730 - val_accuracy: 0.6403 - val_loss: 0.6697\n",
|
280 |
+
"Epoch 40/100\n",
|
281 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 859us/step - accuracy: 0.6599 - loss: 0.5979 - val_accuracy: 0.6259 - val_loss: 0.6921\n",
|
282 |
+
"Epoch 41/100\n",
|
283 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 840us/step - accuracy: 0.7042 - loss: 0.5661 - val_accuracy: 0.6475 - val_loss: 0.6761\n",
|
284 |
+
"Epoch 42/100\n",
|
285 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 859us/step - accuracy: 0.6773 - loss: 0.5497 - val_accuracy: 0.6187 - val_loss: 0.6829\n",
|
286 |
+
"Epoch 43/100\n",
|
287 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 864us/step - accuracy: 0.6886 - loss: 0.5754 - val_accuracy: 0.6475 - val_loss: 0.6664\n",
|
288 |
+
"Epoch 44/100\n",
|
289 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.6558 - loss: 0.5854 - val_accuracy: 0.5755 - val_loss: 0.6825\n",
|
290 |
+
"Epoch 45/100\n",
|
291 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 826us/step - accuracy: 0.6811 - loss: 0.5827 - val_accuracy: 0.6259 - val_loss: 0.6745\n",
|
292 |
+
"Epoch 46/100\n",
|
293 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 819us/step - accuracy: 0.6928 - loss: 0.5798 - val_accuracy: 0.6331 - val_loss: 0.6697\n",
|
294 |
+
"Epoch 47/100\n",
|
295 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 840us/step - accuracy: 0.6635 - loss: 0.5640 - val_accuracy: 0.6259 - val_loss: 0.6800\n",
|
296 |
+
"Epoch 48/100\n",
|
297 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 876us/step - accuracy: 0.7028 - loss: 0.5463 - val_accuracy: 0.6259 - val_loss: 0.6808\n",
|
298 |
+
"Epoch 49/100\n",
|
299 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 863us/step - accuracy: 0.6815 - loss: 0.5471 - val_accuracy: 0.6763 - val_loss: 0.6747\n",
|
300 |
+
"Epoch 50/100\n",
|
301 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 813us/step - accuracy: 0.7056 - loss: 0.5460 - val_accuracy: 0.6043 - val_loss: 0.6732\n",
|
302 |
+
"Epoch 51/100\n",
|
303 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 871us/step - accuracy: 0.6699 - loss: 0.5527 - val_accuracy: 0.6259 - val_loss: 0.6639\n",
|
304 |
+
"Epoch 52/100\n",
|
305 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 851us/step - accuracy: 0.6865 - loss: 0.5431 - val_accuracy: 0.5827 - val_loss: 0.6947\n",
|
306 |
+
"Epoch 53/100\n",
|
307 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 880us/step - accuracy: 0.7055 - loss: 0.5520 - val_accuracy: 0.6691 - val_loss: 0.6790\n",
|
308 |
+
"Epoch 54/100\n",
|
309 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 862us/step - accuracy: 0.6601 - loss: 0.5539 - val_accuracy: 0.6115 - val_loss: 0.6750\n",
|
310 |
+
"Epoch 55/100\n",
|
311 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 892us/step - accuracy: 0.6870 - loss: 0.5535 - val_accuracy: 0.6115 - val_loss: 0.6940\n",
|
312 |
+
"Epoch 56/100\n",
|
313 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 877us/step - accuracy: 0.7203 - loss: 0.5570 - val_accuracy: 0.5971 - val_loss: 0.6825\n",
|
314 |
+
"Epoch 57/100\n",
|
315 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 876us/step - accuracy: 0.6761 - loss: 0.5497 - val_accuracy: 0.6403 - val_loss: 0.6792\n",
|
316 |
+
"Epoch 58/100\n",
|
317 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 914us/step - accuracy: 0.6850 - loss: 0.5713 - val_accuracy: 0.5899 - val_loss: 0.6808\n",
|
318 |
+
"Epoch 59/100\n",
|
319 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 887us/step - accuracy: 0.6847 - loss: 0.5699 - val_accuracy: 0.6331 - val_loss: 0.6751\n",
|
320 |
+
"Epoch 60/100\n",
|
321 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 924us/step - accuracy: 0.6914 - loss: 0.5308 - val_accuracy: 0.6259 - val_loss: 0.6936\n",
|
322 |
+
"Epoch 61/100\n",
|
323 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 923us/step - accuracy: 0.6931 - loss: 0.5340 - val_accuracy: 0.5971 - val_loss: 0.6811\n",
|
324 |
+
"Epoch 62/100\n",
|
325 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 881us/step - accuracy: 0.6754 - loss: 0.5450 - val_accuracy: 0.5971 - val_loss: 0.6735\n",
|
326 |
+
"Epoch 63/100\n",
|
327 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 844us/step - accuracy: 0.6801 - loss: 0.5640 - val_accuracy: 0.6115 - val_loss: 0.6779\n",
|
328 |
+
"Epoch 64/100\n",
|
329 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 857us/step - accuracy: 0.6908 - loss: 0.5368 - val_accuracy: 0.6403 - val_loss: 0.6759\n",
|
330 |
+
"Epoch 65/100\n",
|
331 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 980us/step - accuracy: 0.6560 - loss: 0.5869 - val_accuracy: 0.6403 - val_loss: 0.6796\n",
|
332 |
+
"Epoch 66/100\n",
|
333 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 867us/step - accuracy: 0.6885 - loss: 0.5651 - val_accuracy: 0.5899 - val_loss: 0.6890\n",
|
334 |
+
"Epoch 67/100\n",
|
335 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 865us/step - accuracy: 0.6884 - loss: 0.5416 - val_accuracy: 0.6331 - val_loss: 0.6653\n",
|
336 |
+
"Epoch 68/100\n",
|
337 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 903us/step - accuracy: 0.6798 - loss: 0.5628 - val_accuracy: 0.6619 - val_loss: 0.6721\n",
|
338 |
+
"Epoch 69/100\n",
|
339 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 899us/step - accuracy: 0.7162 - loss: 0.5363 - val_accuracy: 0.6331 - val_loss: 0.6724\n",
|
340 |
+
"Epoch 70/100\n",
|
341 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 866us/step - accuracy: 0.6774 - loss: 0.5539 - val_accuracy: 0.6187 - val_loss: 0.6847\n",
|
342 |
+
"Epoch 71/100\n",
|
343 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 896us/step - accuracy: 0.7058 - loss: 0.5358 - val_accuracy: 0.6187 - val_loss: 0.6825\n",
|
344 |
+
"Epoch 72/100\n",
|
345 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 851us/step - accuracy: 0.6792 - loss: 0.5781 - val_accuracy: 0.6115 - val_loss: 0.6763\n",
|
346 |
+
"Epoch 73/100\n",
|
347 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 901us/step - accuracy: 0.7162 - loss: 0.5427 - val_accuracy: 0.5971 - val_loss: 0.6926\n",
|
348 |
+
"Epoch 74/100\n",
|
349 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 875us/step - accuracy: 0.6971 - loss: 0.5410 - val_accuracy: 0.5971 - val_loss: 0.6893\n",
|
350 |
+
"Epoch 75/100\n",
|
351 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 896us/step - accuracy: 0.6957 - loss: 0.5440 - val_accuracy: 0.6115 - val_loss: 0.6837\n",
|
352 |
+
"Epoch 76/100\n",
|
353 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 878us/step - accuracy: 0.6985 - loss: 0.5571 - val_accuracy: 0.5540 - val_loss: 0.6833\n",
|
354 |
+
"Epoch 77/100\n",
|
355 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 858us/step - accuracy: 0.7319 - loss: 0.5332 - val_accuracy: 0.5971 - val_loss: 0.6736\n",
|
356 |
+
"Epoch 78/100\n",
|
357 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 871us/step - accuracy: 0.6926 - loss: 0.5482 - val_accuracy: 0.6043 - val_loss: 0.6939\n",
|
358 |
+
"Epoch 79/100\n",
|
359 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 945us/step - accuracy: 0.7198 - loss: 0.5172 - val_accuracy: 0.6187 - val_loss: 0.6728\n",
|
360 |
+
"Epoch 80/100\n",
|
361 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 915us/step - accuracy: 0.6939 - loss: 0.5527 - val_accuracy: 0.5971 - val_loss: 0.6927\n",
|
362 |
+
"Epoch 81/100\n",
|
363 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 820us/step - accuracy: 0.7257 - loss: 0.5143 - val_accuracy: 0.6475 - val_loss: 0.6905\n",
|
364 |
+
"Epoch 82/100\n",
|
365 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 797us/step - accuracy: 0.7362 - loss: 0.5186 - val_accuracy: 0.5468 - val_loss: 0.7176\n",
|
366 |
+
"Epoch 83/100\n",
|
367 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 826us/step - accuracy: 0.6970 - loss: 0.5480 - val_accuracy: 0.6043 - val_loss: 0.6709\n",
|
368 |
+
"Epoch 84/100\n",
|
369 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 802us/step - accuracy: 0.6887 - loss: 0.5634 - val_accuracy: 0.6043 - val_loss: 0.6917\n",
|
370 |
+
"Epoch 85/100\n",
|
371 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━���━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 817us/step - accuracy: 0.7044 - loss: 0.5404 - val_accuracy: 0.5827 - val_loss: 0.7027\n",
|
372 |
+
"Epoch 86/100\n",
|
373 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 853us/step - accuracy: 0.7029 - loss: 0.5226 - val_accuracy: 0.5755 - val_loss: 0.6922\n",
|
374 |
+
"Epoch 87/100\n",
|
375 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 797us/step - accuracy: 0.7021 - loss: 0.5481 - val_accuracy: 0.5683 - val_loss: 0.7086\n",
|
376 |
+
"Epoch 88/100\n",
|
377 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 810us/step - accuracy: 0.6886 - loss: 0.5334 - val_accuracy: 0.6187 - val_loss: 0.6981\n",
|
378 |
+
"Epoch 89/100\n",
|
379 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 803us/step - accuracy: 0.7225 - loss: 0.5191 - val_accuracy: 0.5755 - val_loss: 0.6921\n",
|
380 |
+
"Epoch 90/100\n",
|
381 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 846us/step - accuracy: 0.7311 - loss: 0.5138 - val_accuracy: 0.5755 - val_loss: 0.6973\n",
|
382 |
+
"Epoch 91/100\n",
|
383 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 814us/step - accuracy: 0.7425 - loss: 0.5038 - val_accuracy: 0.5612 - val_loss: 0.7220\n",
|
384 |
+
"Epoch 92/100\n",
|
385 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 809us/step - accuracy: 0.6943 - loss: 0.5257 - val_accuracy: 0.6043 - val_loss: 0.6896\n",
|
386 |
+
"Epoch 93/100\n",
|
387 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 806us/step - accuracy: 0.6973 - loss: 0.5225 - val_accuracy: 0.5899 - val_loss: 0.6951\n",
|
388 |
+
"Epoch 94/100\n",
|
389 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 824us/step - accuracy: 0.6944 - loss: 0.5219 - val_accuracy: 0.5971 - val_loss: 0.6913\n",
|
390 |
+
"Epoch 95/100\n",
|
391 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 805us/step - accuracy: 0.7329 - loss: 0.5238 - val_accuracy: 0.5827 - val_loss: 0.7017\n",
|
392 |
+
"Epoch 96/100\n",
|
393 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 833us/step - accuracy: 0.6984 - loss: 0.5337 - val_accuracy: 0.5755 - val_loss: 0.6819\n",
|
394 |
+
"Epoch 97/100\n",
|
395 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 825us/step - accuracy: 0.7147 - loss: 0.5203 - val_accuracy: 0.5899 - val_loss: 0.6892\n",
|
396 |
+
"Epoch 98/100\n",
|
397 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 878us/step - accuracy: 0.6892 - loss: 0.5300 - val_accuracy: 0.5899 - val_loss: 0.7167\n",
|
398 |
+
"Epoch 99/100\n",
|
399 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 879us/step - accuracy: 0.7202 - loss: 0.5175 - val_accuracy: 0.6115 - val_loss: 0.6922\n",
|
400 |
+
"Epoch 100/100\n",
|
401 |
+
"\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 820us/step - accuracy: 0.7134 - loss: 0.5336 - val_accuracy: 0.5971 - val_loss: 0.7082\n"
|
402 |
+
]
|
403 |
+
}
|
404 |
+
],
|
405 |
+
"source": [
|
406 |
+
"model = Sequential([\n",
|
407 |
+
" Conv1D(filters=32, kernel_size=3, activation='relu', input_shape=(X_train.shape[1], 1)),\n",
|
408 |
+
" Conv1D(filters=64, kernel_size=3, activation='relu'),\n",
|
409 |
+
" Dropout(0.10),\n",
|
410 |
+
" Flatten(),\n",
|
411 |
+
" Dense(128, activation='relu'),\n",
|
412 |
+
" Dense(y_train.shape[1], activation='softmax')\n",
|
413 |
+
"])\n",
|
414 |
+
"\n",
|
415 |
+
"model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])\n",
|
416 |
+
"\n",
|
417 |
+
"history = model.fit(X_train, y_train, epochs=100, validation_split=0.2)"
|
418 |
+
]
|
419 |
+
},
|
420 |
+
{
|
421 |
+
"cell_type": "code",
|
422 |
+
"execution_count": 8,
|
423 |
+
"id": "0788ebb8-757f-4180-af39-603f61762b95",
|
424 |
+
"metadata": {},
|
425 |
+
"outputs": [
|
426 |
+
{
|
427 |
+
"name": "stdout",
|
428 |
+
"output_type": "stream",
|
429 |
+
"text": [
|
430 |
+
"\u001b[1m3/3\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - accuracy: 0.6268 - loss: 0.7269 \n",
|
431 |
+
"Test Accuracy: 63.64%\n"
|
432 |
+
]
|
433 |
+
}
|
434 |
+
],
|
435 |
+
"source": [
|
436 |
+
"# Evaluate the model\n",
|
437 |
+
"test_loss, test_acc = model.evaluate(X_test, y_test)\n",
|
438 |
+
"print(f\"Test Accuracy: {test_acc * 100:.2f}%\")"
|
439 |
+
]
|
440 |
+
},
|
441 |
+
{
|
442 |
+
"cell_type": "code",
|
443 |
+
"execution_count": 9,
|
444 |
+
"id": "f74da01a-3768-4101-9a06-0650872e533e",
|
445 |
+
"metadata": {},
|
446 |
+
"outputs": [
|
447 |
+
{
|
448 |
+
"data": {
|
449 |
+
"text/html": [
|
450 |
+
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">Model: \"sequential\"</span>\n",
|
451 |
+
"</pre>\n"
|
452 |
+
],
|
453 |
+
"text/plain": [
|
454 |
+
"\u001b[1mModel: \"sequential\"\u001b[0m\n"
|
455 |
+
]
|
456 |
+
},
|
457 |
+
"metadata": {},
|
458 |
+
"output_type": "display_data"
|
459 |
+
},
|
460 |
+
{
|
461 |
+
"data": {
|
462 |
+
"text/html": [
|
463 |
+
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
|
464 |
+
"┃<span style=\"font-weight: bold\"> Layer (type) </span>┃<span style=\"font-weight: bold\"> Output Shape </span>┃<span style=\"font-weight: bold\"> Param # </span>┃\n",
|
465 |
+
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
|
466 |
+
"│ conv1d (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv1D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">4</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span> │\n",
|
467 |
+
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
468 |
+
"│ conv1d_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv1D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">2</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">6,208</span> │\n",
|
469 |
+
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
470 |
+
"│ dropout (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dropout</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">2</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
|
471 |
+
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
472 |
+
"│ flatten (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Flatten</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
|
473 |
+
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
474 |
+
"│ dense (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">16,512</span> │\n",
|
475 |
+
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
476 |
+
"��� dense_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">2</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">258</span> │\n",
|
477 |
+
"└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
|
478 |
+
"</pre>\n"
|
479 |
+
],
|
480 |
+
"text/plain": [
|
481 |
+
"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
|
482 |
+
"┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n",
|
483 |
+
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
|
484 |
+
"│ conv1d (\u001b[38;5;33mConv1D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m128\u001b[0m │\n",
|
485 |
+
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
486 |
+
"│ conv1d_1 (\u001b[38;5;33mConv1D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m2\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m6,208\u001b[0m │\n",
|
487 |
+
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
488 |
+
"│ dropout (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m2\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
|
489 |
+
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
490 |
+
"│ flatten (\u001b[38;5;33mFlatten\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
|
491 |
+
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
492 |
+
"│ dense (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m16,512\u001b[0m │\n",
|
493 |
+
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
494 |
+
"│ dense_1 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m2\u001b[0m) │ \u001b[38;5;34m258\u001b[0m │\n",
|
495 |
+
"└─────────────────────────────────┴────────────────────────┴───────────────┘\n"
|
496 |
+
]
|
497 |
+
},
|
498 |
+
"metadata": {},
|
499 |
+
"output_type": "display_data"
|
500 |
+
},
|
501 |
+
{
|
502 |
+
"data": {
|
503 |
+
"text/html": [
|
504 |
+
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Total params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">69,320</span> (270.79 KB)\n",
|
505 |
+
"</pre>\n"
|
506 |
+
],
|
507 |
+
"text/plain": [
|
508 |
+
"\u001b[1m Total params: \u001b[0m\u001b[38;5;34m69,320\u001b[0m (270.79 KB)\n"
|
509 |
+
]
|
510 |
+
},
|
511 |
+
"metadata": {},
|
512 |
+
"output_type": "display_data"
|
513 |
+
},
|
514 |
+
{
|
515 |
+
"data": {
|
516 |
+
"text/html": [
|
517 |
+
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">23,106</span> (90.26 KB)\n",
|
518 |
+
"</pre>\n"
|
519 |
+
],
|
520 |
+
"text/plain": [
|
521 |
+
"\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m23,106\u001b[0m (90.26 KB)\n"
|
522 |
+
]
|
523 |
+
},
|
524 |
+
"metadata": {},
|
525 |
+
"output_type": "display_data"
|
526 |
+
},
|
527 |
+
{
|
528 |
+
"data": {
|
529 |
+
"text/html": [
|
530 |
+
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Non-trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (0.00 B)\n",
|
531 |
+
"</pre>\n"
|
532 |
+
],
|
533 |
+
"text/plain": [
|
534 |
+
"\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n"
|
535 |
+
]
|
536 |
+
},
|
537 |
+
"metadata": {},
|
538 |
+
"output_type": "display_data"
|
539 |
+
},
|
540 |
+
{
|
541 |
+
"data": {
|
542 |
+
"text/html": [
|
543 |
+
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Optimizer params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">46,214</span> (180.53 KB)\n",
|
544 |
+
"</pre>\n"
|
545 |
+
],
|
546 |
+
"text/plain": [
|
547 |
+
"\u001b[1m Optimizer params: \u001b[0m\u001b[38;5;34m46,214\u001b[0m (180.53 KB)\n"
|
548 |
+
]
|
549 |
+
},
|
550 |
+
"metadata": {},
|
551 |
+
"output_type": "display_data"
|
552 |
+
},
|
553 |
+
{
|
554 |
+
"data": {
|
555 |
+
"image/png": "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EZkUBjdERERkUhjcEBERkUlhcENEREQmhcENERERmRQGN0RERGRSGNwQERGRSWFwQ0RERCaFwQ0RERGZFAY3REREZFIY3BAREZFJYXBDREREJoXBDREREZkUBjdERERkUhjcEBERkUlhcENEREQmhcENERERmRQGN0RERGRSGNwQERGRSWFwQ0RERCaFwQ0RERGZFAY3REREZFIY3BAREZFJYXBDREREJoXBDREREZkUBjdERERkUhjcEBERkUlhcENEREQmhcENERERmRQGN0RERGRSGNwQERGRSWFwQ0RERCaFwQ0RERGZFAY3REREZFIY3BAREZFJYXBDREREJoXBDREREZkUBjdERERkUhjcEBERkUlhcENEREQmhcENERERmRQGN0RERGRSqkRws3z5cvj5+cHa2hrBwcGIiIgodt1Vq1ahc+fOcHJygpOTE0JDQ0tcn4iIiP5bjB7cbNq0CTNmzMD8+fNx5swZBAYGonfv3khISChy/QMHDmDo0KHYv38/wsPD4evri2eeeQb37t2r5JITERFRVSSTJEkyZgGCg4PRtm1bLFu2DACgVCrh6+uLKVOmYNasWU/dXqFQwMnJCcuWLcPIkSOfun5aWhocHR2RmpoKBweHcpefiIiIKp4+12+j1tzk5ubi9OnTCA0NVS+Ty+UIDQ1FeHh4qfbx+PFj5OXlwdnZucjXc3JykJaWpvMgIiIi02XU4CYpKQkKhQIeHh46yz08PBAXF1eqfcycORPe3t46AZK2xYsXw9HRUf3w9fUtd7mJiIio6jJ6zk15fPrpp9i4cSO2bdsGa2vrIteZPXs2UlNT1Y/Y2NhKLiURERFVJnNjHtzV1RVmZmaIj4/XWR4fHw9PT88St/3iiy/w6aefYu/evWjRokWx61lZWcHKysog5SUiIqKqz6g1N5aWlggKCkJYWJh6mVKpRFhYGEJCQord7rPPPsNHH32EXbt2oU2bNpVRVCIiIqomjFpzAwAzZszAqFGj0KZNG7Rr1w5LlixBZmYmxowZAwAYOXIkfHx8sHjxYgDA//3f/2HevHlYv349/Pz81Lk59vb2sLe3N9r7ICIioqrB6MHN4MGDkZiYiHnz5iEuLg4tW7bErl271EnGMTExkMs1FUwrVqxAbm4uXnrpJZ39zJ8/HwsWLKjMohMREVEVZPRxbiobx7khIiKqfqrN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",
|
556 |
+
"text/plain": [
|
557 |
+
"<Figure size 640x480 with 1 Axes>"
|
558 |
+
]
|
559 |
+
},
|
560 |
+
"metadata": {},
|
561 |
+
"output_type": "display_data"
|
562 |
+
}
|
563 |
+
],
|
564 |
+
"source": [
|
565 |
+
"model.summary()\n",
|
566 |
+
"\n",
|
567 |
+
"import matplotlib.pyplot as plt\n",
|
568 |
+
"\n",
|
569 |
+
"plt.plot(history.history['accuracy'], label='Accuracy')\n",
|
570 |
+
"plt.plot(history.history['val_accuracy'], label='Validation Accuracy')\n",
|
571 |
+
"plt.xlabel('Epoch')\n",
|
572 |
+
"plt.ylabel('Accuracy')\n",
|
573 |
+
"plt.ylim([0, 1])\n",
|
574 |
+
"plt.legend(loc='lower right')\n",
|
575 |
+
"plt.show()"
|
576 |
+
]
|
577 |
+
},
|
578 |
+
{
|
579 |
+
"cell_type": "code",
|
580 |
+
"execution_count": 10,
|
581 |
+
"id": "9c29a12b-9fda-49b3-bd85-fa699e1f61a2",
|
582 |
+
"metadata": {},
|
583 |
+
"outputs": [],
|
584 |
+
"source": [
|
585 |
+
"model.save('patient_outcome_classifier.keras')"
|
586 |
+
]
|
587 |
+
}
|
588 |
+
],
|
589 |
+
"metadata": {
|
590 |
+
"kernelspec": {
|
591 |
+
"display_name": "Python 3 (ipykernel)",
|
592 |
+
"language": "python",
|
593 |
+
"name": "python3"
|
594 |
+
},
|
595 |
+
"language_info": {
|
596 |
+
"codemirror_mode": {
|
597 |
+
"name": "ipython",
|
598 |
+
"version": 3
|
599 |
+
},
|
600 |
+
"file_extension": ".py",
|
601 |
+
"mimetype": "text/x-python",
|
602 |
+
"name": "python",
|
603 |
+
"nbconvert_exporter": "python",
|
604 |
+
"pygments_lexer": "ipython3",
|
605 |
+
"version": "3.12.3"
|
606 |
+
}
|
607 |
+
},
|
608 |
+
"nbformat": 4,
|
609 |
+
"nbformat_minor": 5
|
610 |
+
}
|
examples.py
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
normal = [
|
2 |
+
"49719_AV.wav",
|
3 |
+
"Child",
|
4 |
+
"Male",
|
5 |
+
102.0,
|
6 |
+
17.5,
|
7 |
+
False
|
8 |
+
]
|
9 |
+
abnormal = [
|
10 |
+
"49719_AV.wav",
|
11 |
+
"Child",
|
12 |
+
"Male",
|
13 |
+
102.0,
|
14 |
+
17.5,
|
15 |
+
False
|
16 |
+
]
|
flagged/Recording/e02094dd02e255b311d4/13918_TV_present.wav
ADDED
Binary file (52.8 kB). View file
|
|
flagged/log.csv
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
Recording,Age,Sex,Height,Weight,Pregnant,output,flag,username,timestamp
|
2 |
+
flagged/Recording/e02094dd02e255b311d4/13918_TV_present.wav,Adolescent,Male,98.0,38.1,false,"{""label"": null, ""confidences"": null}",,,2024-05-03 04:49:06.732213
|
gradio_cached_examples/18/log.csv
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
output,flag,username,timestamp
|
2 |
+
"{""label"": ""Abnormal"", ""confidences"": [{""label"": ""Abnormal"", ""confidence"": 1.0}, {""label"": ""Normal"", ""confidence"": 0.0}]}",,,2024-05-03 05:03:16.773406
|
patient_outcome_classifier.keras
CHANGED
Binary files a/patient_outcome_classifier.keras and b/patient_outcome_classifier.keras differ
|
|
pyproject.toml
ADDED
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
[project]
|
2 |
+
name = "heartmurmurclassification"
|
3 |
+
version = "0.1.0"
|
4 |
+
description = "Add your description here"
|
5 |
+
authors = [
|
6 |
+
{ name = "Rohit Krishnan", email = "[email protected]" }
|
7 |
+
]
|
8 |
+
dependencies = [
|
9 |
+
"pandas>=2.2.2",
|
10 |
+
"torch>=2.3.0",
|
11 |
+
"torchaudio>=2.3.0",
|
12 |
+
"pillow>=10.3.0",
|
13 |
+
"tensorflow>=2.16.1",
|
14 |
+
"tf-keras>=2.16.0",
|
15 |
+
"transformers[torch]>=4.40.1",
|
16 |
+
"gradio>=4.28.3",
|
17 |
+
"jupyterlab>=4.1.8",
|
18 |
+
"scikit-learn>=1.4.2",
|
19 |
+
"imblearn>=0.0",
|
20 |
+
]
|
21 |
+
readme = "README.md"
|
22 |
+
requires-python = ">= 3.8"
|
23 |
+
|
24 |
+
[tool.rye]
|
25 |
+
managed = true
|
26 |
+
virtual = true
|
27 |
+
dev-dependencies = []
|
requirements-dev.lock
ADDED
@@ -0,0 +1,520 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# generated by rye
|
2 |
+
# use `rye lock` or `rye sync` to update this lockfile
|
3 |
+
#
|
4 |
+
# last locked with the following flags:
|
5 |
+
# pre: false
|
6 |
+
# features: []
|
7 |
+
# all-features: false
|
8 |
+
# with-sources: false
|
9 |
+
|
10 |
+
absl-py==2.1.0
|
11 |
+
# via keras
|
12 |
+
# via tensorboard
|
13 |
+
# via tensorflow
|
14 |
+
accelerate==0.29.3
|
15 |
+
# via transformers
|
16 |
+
aiofiles==23.2.1
|
17 |
+
# via gradio
|
18 |
+
altair==5.3.0
|
19 |
+
# via gradio
|
20 |
+
annotated-types==0.6.0
|
21 |
+
# via pydantic
|
22 |
+
anyio==4.3.0
|
23 |
+
# via httpx
|
24 |
+
# via jupyter-server
|
25 |
+
# via starlette
|
26 |
+
# via watchfiles
|
27 |
+
appnope==0.1.4
|
28 |
+
# via ipykernel
|
29 |
+
argon2-cffi==23.1.0
|
30 |
+
# via jupyter-server
|
31 |
+
argon2-cffi-bindings==21.2.0
|
32 |
+
# via argon2-cffi
|
33 |
+
arrow==1.3.0
|
34 |
+
# via isoduration
|
35 |
+
asttokens==2.4.1
|
36 |
+
# via stack-data
|
37 |
+
astunparse==1.6.3
|
38 |
+
# via tensorflow
|
39 |
+
async-lru==2.0.4
|
40 |
+
# via jupyterlab
|
41 |
+
attrs==23.2.0
|
42 |
+
# via jsonschema
|
43 |
+
# via referencing
|
44 |
+
babel==2.14.0
|
45 |
+
# via jupyterlab-server
|
46 |
+
beautifulsoup4==4.12.3
|
47 |
+
# via nbconvert
|
48 |
+
bleach==6.1.0
|
49 |
+
# via nbconvert
|
50 |
+
certifi==2024.2.2
|
51 |
+
# via httpcore
|
52 |
+
# via httpx
|
53 |
+
# via requests
|
54 |
+
cffi==1.16.0
|
55 |
+
# via argon2-cffi-bindings
|
56 |
+
charset-normalizer==3.3.2
|
57 |
+
# via requests
|
58 |
+
click==8.1.7
|
59 |
+
# via typer
|
60 |
+
# via uvicorn
|
61 |
+
comm==0.2.2
|
62 |
+
# via ipykernel
|
63 |
+
contourpy==1.2.1
|
64 |
+
# via matplotlib
|
65 |
+
cycler==0.12.1
|
66 |
+
# via matplotlib
|
67 |
+
debugpy==1.8.1
|
68 |
+
# via ipykernel
|
69 |
+
decorator==5.1.1
|
70 |
+
# via ipython
|
71 |
+
defusedxml==0.7.1
|
72 |
+
# via nbconvert
|
73 |
+
dnspython==2.6.1
|
74 |
+
# via email-validator
|
75 |
+
email-validator==2.1.1
|
76 |
+
# via fastapi
|
77 |
+
executing==2.0.1
|
78 |
+
# via stack-data
|
79 |
+
fastapi==0.111.0
|
80 |
+
# via fastapi-cli
|
81 |
+
# via gradio
|
82 |
+
fastapi-cli==0.0.2
|
83 |
+
# via fastapi
|
84 |
+
fastjsonschema==2.19.1
|
85 |
+
# via nbformat
|
86 |
+
ffmpy==0.3.2
|
87 |
+
# via gradio
|
88 |
+
filelock==3.14.0
|
89 |
+
# via huggingface-hub
|
90 |
+
# via torch
|
91 |
+
# via transformers
|
92 |
+
flatbuffers==24.3.25
|
93 |
+
# via tensorflow
|
94 |
+
fonttools==4.51.0
|
95 |
+
# via matplotlib
|
96 |
+
fqdn==1.5.1
|
97 |
+
# via jsonschema
|
98 |
+
fsspec==2024.3.1
|
99 |
+
# via gradio-client
|
100 |
+
# via huggingface-hub
|
101 |
+
# via torch
|
102 |
+
gast==0.5.4
|
103 |
+
# via tensorflow
|
104 |
+
google-pasta==0.2.0
|
105 |
+
# via tensorflow
|
106 |
+
gradio==4.28.3
|
107 |
+
gradio-client==0.16.0
|
108 |
+
# via gradio
|
109 |
+
grpcio==1.63.0
|
110 |
+
# via tensorboard
|
111 |
+
# via tensorflow
|
112 |
+
h11==0.14.0
|
113 |
+
# via httpcore
|
114 |
+
# via uvicorn
|
115 |
+
h5py==3.11.0
|
116 |
+
# via keras
|
117 |
+
# via tensorflow
|
118 |
+
httpcore==1.0.5
|
119 |
+
# via httpx
|
120 |
+
httptools==0.6.1
|
121 |
+
# via uvicorn
|
122 |
+
httpx==0.27.0
|
123 |
+
# via fastapi
|
124 |
+
# via gradio
|
125 |
+
# via gradio-client
|
126 |
+
# via jupyterlab
|
127 |
+
huggingface-hub==0.23.0
|
128 |
+
# via accelerate
|
129 |
+
# via gradio
|
130 |
+
# via gradio-client
|
131 |
+
# via tokenizers
|
132 |
+
# via transformers
|
133 |
+
idna==3.7
|
134 |
+
# via anyio
|
135 |
+
# via email-validator
|
136 |
+
# via httpx
|
137 |
+
# via jsonschema
|
138 |
+
# via requests
|
139 |
+
imbalanced-learn==0.12.2
|
140 |
+
# via imblearn
|
141 |
+
imblearn==0.0
|
142 |
+
importlib-resources==6.4.0
|
143 |
+
# via gradio
|
144 |
+
ipykernel==6.29.4
|
145 |
+
# via jupyterlab
|
146 |
+
ipython==8.24.0
|
147 |
+
# via ipykernel
|
148 |
+
isoduration==20.11.0
|
149 |
+
# via jsonschema
|
150 |
+
jedi==0.19.1
|
151 |
+
# via ipython
|
152 |
+
jinja2==3.1.3
|
153 |
+
# via altair
|
154 |
+
# via fastapi
|
155 |
+
# via gradio
|
156 |
+
# via jupyter-server
|
157 |
+
# via jupyterlab
|
158 |
+
# via jupyterlab-server
|
159 |
+
# via nbconvert
|
160 |
+
# via torch
|
161 |
+
joblib==1.4.2
|
162 |
+
# via imbalanced-learn
|
163 |
+
# via scikit-learn
|
164 |
+
json5==0.9.25
|
165 |
+
# via jupyterlab-server
|
166 |
+
jsonpointer==2.4
|
167 |
+
# via jsonschema
|
168 |
+
jsonschema==4.22.0
|
169 |
+
# via altair
|
170 |
+
# via jupyter-events
|
171 |
+
# via jupyterlab-server
|
172 |
+
# via nbformat
|
173 |
+
jsonschema-specifications==2023.12.1
|
174 |
+
# via jsonschema
|
175 |
+
jupyter-client==8.6.1
|
176 |
+
# via ipykernel
|
177 |
+
# via jupyter-server
|
178 |
+
# via nbclient
|
179 |
+
jupyter-core==5.7.2
|
180 |
+
# via ipykernel
|
181 |
+
# via jupyter-client
|
182 |
+
# via jupyter-server
|
183 |
+
# via jupyterlab
|
184 |
+
# via nbclient
|
185 |
+
# via nbconvert
|
186 |
+
# via nbformat
|
187 |
+
jupyter-events==0.10.0
|
188 |
+
# via jupyter-server
|
189 |
+
jupyter-lsp==2.2.5
|
190 |
+
# via jupyterlab
|
191 |
+
jupyter-server==2.14.0
|
192 |
+
# via jupyter-lsp
|
193 |
+
# via jupyterlab
|
194 |
+
# via jupyterlab-server
|
195 |
+
# via notebook-shim
|
196 |
+
jupyter-server-terminals==0.5.3
|
197 |
+
# via jupyter-server
|
198 |
+
jupyterlab==4.1.8
|
199 |
+
jupyterlab-pygments==0.3.0
|
200 |
+
# via nbconvert
|
201 |
+
jupyterlab-server==2.27.1
|
202 |
+
# via jupyterlab
|
203 |
+
keras==3.3.3
|
204 |
+
# via tensorflow
|
205 |
+
kiwisolver==1.4.5
|
206 |
+
# via matplotlib
|
207 |
+
libclang==18.1.1
|
208 |
+
# via tensorflow
|
209 |
+
markdown==3.6
|
210 |
+
# via tensorboard
|
211 |
+
markdown-it-py==3.0.0
|
212 |
+
# via rich
|
213 |
+
markupsafe==2.1.5
|
214 |
+
# via gradio
|
215 |
+
# via jinja2
|
216 |
+
# via nbconvert
|
217 |
+
# via werkzeug
|
218 |
+
matplotlib==3.8.4
|
219 |
+
# via gradio
|
220 |
+
matplotlib-inline==0.1.7
|
221 |
+
# via ipykernel
|
222 |
+
# via ipython
|
223 |
+
mdurl==0.1.2
|
224 |
+
# via markdown-it-py
|
225 |
+
mistune==3.0.2
|
226 |
+
# via nbconvert
|
227 |
+
ml-dtypes==0.3.2
|
228 |
+
# via keras
|
229 |
+
# via tensorflow
|
230 |
+
mpmath==1.3.0
|
231 |
+
# via sympy
|
232 |
+
namex==0.0.8
|
233 |
+
# via keras
|
234 |
+
nbclient==0.10.0
|
235 |
+
# via nbconvert
|
236 |
+
nbconvert==7.16.4
|
237 |
+
# via jupyter-server
|
238 |
+
nbformat==5.10.4
|
239 |
+
# via jupyter-server
|
240 |
+
# via nbclient
|
241 |
+
# via nbconvert
|
242 |
+
nest-asyncio==1.6.0
|
243 |
+
# via ipykernel
|
244 |
+
networkx==3.3
|
245 |
+
# via torch
|
246 |
+
notebook-shim==0.2.4
|
247 |
+
# via jupyterlab
|
248 |
+
numpy==1.26.4
|
249 |
+
# via accelerate
|
250 |
+
# via altair
|
251 |
+
# via contourpy
|
252 |
+
# via gradio
|
253 |
+
# via h5py
|
254 |
+
# via imbalanced-learn
|
255 |
+
# via keras
|
256 |
+
# via matplotlib
|
257 |
+
# via ml-dtypes
|
258 |
+
# via opt-einsum
|
259 |
+
# via pandas
|
260 |
+
# via scikit-learn
|
261 |
+
# via scipy
|
262 |
+
# via tensorboard
|
263 |
+
# via tensorflow
|
264 |
+
# via transformers
|
265 |
+
opt-einsum==3.3.0
|
266 |
+
# via tensorflow
|
267 |
+
optree==0.11.0
|
268 |
+
# via keras
|
269 |
+
orjson==3.10.2
|
270 |
+
# via fastapi
|
271 |
+
# via gradio
|
272 |
+
overrides==7.7.0
|
273 |
+
# via jupyter-server
|
274 |
+
packaging==24.0
|
275 |
+
# via accelerate
|
276 |
+
# via altair
|
277 |
+
# via gradio
|
278 |
+
# via gradio-client
|
279 |
+
# via huggingface-hub
|
280 |
+
# via ipykernel
|
281 |
+
# via jupyter-server
|
282 |
+
# via jupyterlab
|
283 |
+
# via jupyterlab-server
|
284 |
+
# via matplotlib
|
285 |
+
# via nbconvert
|
286 |
+
# via tensorflow
|
287 |
+
# via transformers
|
288 |
+
pandas==2.2.2
|
289 |
+
# via altair
|
290 |
+
# via gradio
|
291 |
+
pandocfilters==1.5.1
|
292 |
+
# via nbconvert
|
293 |
+
parso==0.8.4
|
294 |
+
# via jedi
|
295 |
+
pexpect==4.9.0
|
296 |
+
# via ipython
|
297 |
+
pillow==10.3.0
|
298 |
+
# via gradio
|
299 |
+
# via matplotlib
|
300 |
+
platformdirs==4.2.1
|
301 |
+
# via jupyter-core
|
302 |
+
prometheus-client==0.20.0
|
303 |
+
# via jupyter-server
|
304 |
+
prompt-toolkit==3.0.43
|
305 |
+
# via ipython
|
306 |
+
protobuf==4.25.3
|
307 |
+
# via tensorboard
|
308 |
+
# via tensorflow
|
309 |
+
psutil==5.9.8
|
310 |
+
# via accelerate
|
311 |
+
# via ipykernel
|
312 |
+
ptyprocess==0.7.0
|
313 |
+
# via pexpect
|
314 |
+
# via terminado
|
315 |
+
pure-eval==0.2.2
|
316 |
+
# via stack-data
|
317 |
+
pycparser==2.22
|
318 |
+
# via cffi
|
319 |
+
pydantic==2.7.1
|
320 |
+
# via fastapi
|
321 |
+
# via gradio
|
322 |
+
pydantic-core==2.18.2
|
323 |
+
# via pydantic
|
324 |
+
pydub==0.25.1
|
325 |
+
# via gradio
|
326 |
+
pygments==2.17.2
|
327 |
+
# via ipython
|
328 |
+
# via nbconvert
|
329 |
+
# via rich
|
330 |
+
pyparsing==3.1.2
|
331 |
+
# via matplotlib
|
332 |
+
python-dateutil==2.9.0.post0
|
333 |
+
# via arrow
|
334 |
+
# via jupyter-client
|
335 |
+
# via matplotlib
|
336 |
+
# via pandas
|
337 |
+
python-dotenv==1.0.1
|
338 |
+
# via uvicorn
|
339 |
+
python-json-logger==2.0.7
|
340 |
+
# via jupyter-events
|
341 |
+
python-multipart==0.0.9
|
342 |
+
# via fastapi
|
343 |
+
# via gradio
|
344 |
+
pytz==2024.1
|
345 |
+
# via pandas
|
346 |
+
pyyaml==6.0.1
|
347 |
+
# via accelerate
|
348 |
+
# via gradio
|
349 |
+
# via huggingface-hub
|
350 |
+
# via jupyter-events
|
351 |
+
# via transformers
|
352 |
+
# via uvicorn
|
353 |
+
pyzmq==26.0.3
|
354 |
+
# via ipykernel
|
355 |
+
# via jupyter-client
|
356 |
+
# via jupyter-server
|
357 |
+
referencing==0.35.1
|
358 |
+
# via jsonschema
|
359 |
+
# via jsonschema-specifications
|
360 |
+
# via jupyter-events
|
361 |
+
regex==2024.4.28
|
362 |
+
# via transformers
|
363 |
+
requests==2.31.0
|
364 |
+
# via huggingface-hub
|
365 |
+
# via jupyterlab-server
|
366 |
+
# via tensorflow
|
367 |
+
# via transformers
|
368 |
+
rfc3339-validator==0.1.4
|
369 |
+
# via jsonschema
|
370 |
+
# via jupyter-events
|
371 |
+
rfc3986-validator==0.1.1
|
372 |
+
# via jsonschema
|
373 |
+
# via jupyter-events
|
374 |
+
rich==13.7.1
|
375 |
+
# via keras
|
376 |
+
# via typer
|
377 |
+
rpds-py==0.18.0
|
378 |
+
# via jsonschema
|
379 |
+
# via referencing
|
380 |
+
ruff==0.4.2
|
381 |
+
# via gradio
|
382 |
+
safetensors==0.4.3
|
383 |
+
# via accelerate
|
384 |
+
# via transformers
|
385 |
+
scikit-learn==1.4.2
|
386 |
+
# via imbalanced-learn
|
387 |
+
scipy==1.13.0
|
388 |
+
# via imbalanced-learn
|
389 |
+
# via scikit-learn
|
390 |
+
semantic-version==2.10.0
|
391 |
+
# via gradio
|
392 |
+
send2trash==1.8.3
|
393 |
+
# via jupyter-server
|
394 |
+
setuptools==69.5.1
|
395 |
+
# via tensorboard
|
396 |
+
# via tensorflow
|
397 |
+
shellingham==1.5.4
|
398 |
+
# via typer
|
399 |
+
six==1.16.0
|
400 |
+
# via asttokens
|
401 |
+
# via astunparse
|
402 |
+
# via bleach
|
403 |
+
# via google-pasta
|
404 |
+
# via python-dateutil
|
405 |
+
# via rfc3339-validator
|
406 |
+
# via tensorboard
|
407 |
+
# via tensorflow
|
408 |
+
sniffio==1.3.1
|
409 |
+
# via anyio
|
410 |
+
# via httpx
|
411 |
+
soupsieve==2.5
|
412 |
+
# via beautifulsoup4
|
413 |
+
stack-data==0.6.3
|
414 |
+
# via ipython
|
415 |
+
starlette==0.37.2
|
416 |
+
# via fastapi
|
417 |
+
sympy==1.12
|
418 |
+
# via torch
|
419 |
+
tensorboard==2.16.2
|
420 |
+
# via tensorflow
|
421 |
+
tensorboard-data-server==0.7.2
|
422 |
+
# via tensorboard
|
423 |
+
tensorflow==2.16.1
|
424 |
+
# via tf-keras
|
425 |
+
termcolor==2.4.0
|
426 |
+
# via tensorflow
|
427 |
+
terminado==0.18.1
|
428 |
+
# via jupyter-server
|
429 |
+
# via jupyter-server-terminals
|
430 |
+
tf-keras==2.16.0
|
431 |
+
threadpoolctl==3.5.0
|
432 |
+
# via imbalanced-learn
|
433 |
+
# via scikit-learn
|
434 |
+
tinycss2==1.3.0
|
435 |
+
# via nbconvert
|
436 |
+
tokenizers==0.19.1
|
437 |
+
# via transformers
|
438 |
+
tomlkit==0.12.0
|
439 |
+
# via gradio
|
440 |
+
toolz==0.12.1
|
441 |
+
# via altair
|
442 |
+
torch==2.3.0
|
443 |
+
# via accelerate
|
444 |
+
# via torchaudio
|
445 |
+
# via transformers
|
446 |
+
torchaudio==2.3.0
|
447 |
+
tornado==6.4
|
448 |
+
# via ipykernel
|
449 |
+
# via jupyter-client
|
450 |
+
# via jupyter-server
|
451 |
+
# via jupyterlab
|
452 |
+
# via terminado
|
453 |
+
tqdm==4.66.4
|
454 |
+
# via huggingface-hub
|
455 |
+
# via transformers
|
456 |
+
traitlets==5.14.3
|
457 |
+
# via comm
|
458 |
+
# via ipykernel
|
459 |
+
# via ipython
|
460 |
+
# via jupyter-client
|
461 |
+
# via jupyter-core
|
462 |
+
# via jupyter-events
|
463 |
+
# via jupyter-server
|
464 |
+
# via jupyterlab
|
465 |
+
# via matplotlib-inline
|
466 |
+
# via nbclient
|
467 |
+
# via nbconvert
|
468 |
+
# via nbformat
|
469 |
+
transformers==4.40.1
|
470 |
+
typer==0.12.3
|
471 |
+
# via fastapi-cli
|
472 |
+
# via gradio
|
473 |
+
types-python-dateutil==2.9.0.20240316
|
474 |
+
# via arrow
|
475 |
+
typing-extensions==4.11.0
|
476 |
+
# via fastapi
|
477 |
+
# via gradio
|
478 |
+
# via gradio-client
|
479 |
+
# via huggingface-hub
|
480 |
+
# via optree
|
481 |
+
# via pydantic
|
482 |
+
# via pydantic-core
|
483 |
+
# via tensorflow
|
484 |
+
# via torch
|
485 |
+
# via typer
|
486 |
+
tzdata==2024.1
|
487 |
+
# via pandas
|
488 |
+
ujson==5.9.0
|
489 |
+
# via fastapi
|
490 |
+
uri-template==1.3.0
|
491 |
+
# via jsonschema
|
492 |
+
urllib3==2.2.1
|
493 |
+
# via gradio
|
494 |
+
# via requests
|
495 |
+
uvicorn==0.29.0
|
496 |
+
# via fastapi
|
497 |
+
# via fastapi-cli
|
498 |
+
# via gradio
|
499 |
+
uvloop==0.19.0
|
500 |
+
# via uvicorn
|
501 |
+
watchfiles==0.21.0
|
502 |
+
# via uvicorn
|
503 |
+
wcwidth==0.2.13
|
504 |
+
# via prompt-toolkit
|
505 |
+
webcolors==1.13
|
506 |
+
# via jsonschema
|
507 |
+
webencodings==0.5.1
|
508 |
+
# via bleach
|
509 |
+
# via tinycss2
|
510 |
+
websocket-client==1.8.0
|
511 |
+
# via jupyter-server
|
512 |
+
websockets==11.0.3
|
513 |
+
# via gradio-client
|
514 |
+
# via uvicorn
|
515 |
+
werkzeug==3.0.2
|
516 |
+
# via tensorboard
|
517 |
+
wheel==0.43.0
|
518 |
+
# via astunparse
|
519 |
+
wrapt==1.16.0
|
520 |
+
# via tensorflow
|
requirements.lock
ADDED
@@ -0,0 +1,520 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# generated by rye
|
2 |
+
# use `rye lock` or `rye sync` to update this lockfile
|
3 |
+
#
|
4 |
+
# last locked with the following flags:
|
5 |
+
# pre: false
|
6 |
+
# features: []
|
7 |
+
# all-features: false
|
8 |
+
# with-sources: false
|
9 |
+
|
10 |
+
absl-py==2.1.0
|
11 |
+
# via keras
|
12 |
+
# via tensorboard
|
13 |
+
# via tensorflow
|
14 |
+
accelerate==0.29.3
|
15 |
+
# via transformers
|
16 |
+
aiofiles==23.2.1
|
17 |
+
# via gradio
|
18 |
+
altair==5.3.0
|
19 |
+
# via gradio
|
20 |
+
annotated-types==0.6.0
|
21 |
+
# via pydantic
|
22 |
+
anyio==4.3.0
|
23 |
+
# via httpx
|
24 |
+
# via jupyter-server
|
25 |
+
# via starlette
|
26 |
+
# via watchfiles
|
27 |
+
appnope==0.1.4
|
28 |
+
# via ipykernel
|
29 |
+
argon2-cffi==23.1.0
|
30 |
+
# via jupyter-server
|
31 |
+
argon2-cffi-bindings==21.2.0
|
32 |
+
# via argon2-cffi
|
33 |
+
arrow==1.3.0
|
34 |
+
# via isoduration
|
35 |
+
asttokens==2.4.1
|
36 |
+
# via stack-data
|
37 |
+
astunparse==1.6.3
|
38 |
+
# via tensorflow
|
39 |
+
async-lru==2.0.4
|
40 |
+
# via jupyterlab
|
41 |
+
attrs==23.2.0
|
42 |
+
# via jsonschema
|
43 |
+
# via referencing
|
44 |
+
babel==2.14.0
|
45 |
+
# via jupyterlab-server
|
46 |
+
beautifulsoup4==4.12.3
|
47 |
+
# via nbconvert
|
48 |
+
bleach==6.1.0
|
49 |
+
# via nbconvert
|
50 |
+
certifi==2024.2.2
|
51 |
+
# via httpcore
|
52 |
+
# via httpx
|
53 |
+
# via requests
|
54 |
+
cffi==1.16.0
|
55 |
+
# via argon2-cffi-bindings
|
56 |
+
charset-normalizer==3.3.2
|
57 |
+
# via requests
|
58 |
+
click==8.1.7
|
59 |
+
# via typer
|
60 |
+
# via uvicorn
|
61 |
+
comm==0.2.2
|
62 |
+
# via ipykernel
|
63 |
+
contourpy==1.2.1
|
64 |
+
# via matplotlib
|
65 |
+
cycler==0.12.1
|
66 |
+
# via matplotlib
|
67 |
+
debugpy==1.8.1
|
68 |
+
# via ipykernel
|
69 |
+
decorator==5.1.1
|
70 |
+
# via ipython
|
71 |
+
defusedxml==0.7.1
|
72 |
+
# via nbconvert
|
73 |
+
dnspython==2.6.1
|
74 |
+
# via email-validator
|
75 |
+
email-validator==2.1.1
|
76 |
+
# via fastapi
|
77 |
+
executing==2.0.1
|
78 |
+
# via stack-data
|
79 |
+
fastapi==0.111.0
|
80 |
+
# via fastapi-cli
|
81 |
+
# via gradio
|
82 |
+
fastapi-cli==0.0.2
|
83 |
+
# via fastapi
|
84 |
+
fastjsonschema==2.19.1
|
85 |
+
# via nbformat
|
86 |
+
ffmpy==0.3.2
|
87 |
+
# via gradio
|
88 |
+
filelock==3.14.0
|
89 |
+
# via huggingface-hub
|
90 |
+
# via torch
|
91 |
+
# via transformers
|
92 |
+
flatbuffers==24.3.25
|
93 |
+
# via tensorflow
|
94 |
+
fonttools==4.51.0
|
95 |
+
# via matplotlib
|
96 |
+
fqdn==1.5.1
|
97 |
+
# via jsonschema
|
98 |
+
fsspec==2024.3.1
|
99 |
+
# via gradio-client
|
100 |
+
# via huggingface-hub
|
101 |
+
# via torch
|
102 |
+
gast==0.5.4
|
103 |
+
# via tensorflow
|
104 |
+
google-pasta==0.2.0
|
105 |
+
# via tensorflow
|
106 |
+
gradio==4.28.3
|
107 |
+
gradio-client==0.16.0
|
108 |
+
# via gradio
|
109 |
+
grpcio==1.63.0
|
110 |
+
# via tensorboard
|
111 |
+
# via tensorflow
|
112 |
+
h11==0.14.0
|
113 |
+
# via httpcore
|
114 |
+
# via uvicorn
|
115 |
+
h5py==3.11.0
|
116 |
+
# via keras
|
117 |
+
# via tensorflow
|
118 |
+
httpcore==1.0.5
|
119 |
+
# via httpx
|
120 |
+
httptools==0.6.1
|
121 |
+
# via uvicorn
|
122 |
+
httpx==0.27.0
|
123 |
+
# via fastapi
|
124 |
+
# via gradio
|
125 |
+
# via gradio-client
|
126 |
+
# via jupyterlab
|
127 |
+
huggingface-hub==0.23.0
|
128 |
+
# via accelerate
|
129 |
+
# via gradio
|
130 |
+
# via gradio-client
|
131 |
+
# via tokenizers
|
132 |
+
# via transformers
|
133 |
+
idna==3.7
|
134 |
+
# via anyio
|
135 |
+
# via email-validator
|
136 |
+
# via httpx
|
137 |
+
# via jsonschema
|
138 |
+
# via requests
|
139 |
+
imbalanced-learn==0.12.2
|
140 |
+
# via imblearn
|
141 |
+
imblearn==0.0
|
142 |
+
importlib-resources==6.4.0
|
143 |
+
# via gradio
|
144 |
+
ipykernel==6.29.4
|
145 |
+
# via jupyterlab
|
146 |
+
ipython==8.24.0
|
147 |
+
# via ipykernel
|
148 |
+
isoduration==20.11.0
|
149 |
+
# via jsonschema
|
150 |
+
jedi==0.19.1
|
151 |
+
# via ipython
|
152 |
+
jinja2==3.1.3
|
153 |
+
# via altair
|
154 |
+
# via fastapi
|
155 |
+
# via gradio
|
156 |
+
# via jupyter-server
|
157 |
+
# via jupyterlab
|
158 |
+
# via jupyterlab-server
|
159 |
+
# via nbconvert
|
160 |
+
# via torch
|
161 |
+
joblib==1.4.2
|
162 |
+
# via imbalanced-learn
|
163 |
+
# via scikit-learn
|
164 |
+
json5==0.9.25
|
165 |
+
# via jupyterlab-server
|
166 |
+
jsonpointer==2.4
|
167 |
+
# via jsonschema
|
168 |
+
jsonschema==4.22.0
|
169 |
+
# via altair
|
170 |
+
# via jupyter-events
|
171 |
+
# via jupyterlab-server
|
172 |
+
# via nbformat
|
173 |
+
jsonschema-specifications==2023.12.1
|
174 |
+
# via jsonschema
|
175 |
+
jupyter-client==8.6.1
|
176 |
+
# via ipykernel
|
177 |
+
# via jupyter-server
|
178 |
+
# via nbclient
|
179 |
+
jupyter-core==5.7.2
|
180 |
+
# via ipykernel
|
181 |
+
# via jupyter-client
|
182 |
+
# via jupyter-server
|
183 |
+
# via jupyterlab
|
184 |
+
# via nbclient
|
185 |
+
# via nbconvert
|
186 |
+
# via nbformat
|
187 |
+
jupyter-events==0.10.0
|
188 |
+
# via jupyter-server
|
189 |
+
jupyter-lsp==2.2.5
|
190 |
+
# via jupyterlab
|
191 |
+
jupyter-server==2.14.0
|
192 |
+
# via jupyter-lsp
|
193 |
+
# via jupyterlab
|
194 |
+
# via jupyterlab-server
|
195 |
+
# via notebook-shim
|
196 |
+
jupyter-server-terminals==0.5.3
|
197 |
+
# via jupyter-server
|
198 |
+
jupyterlab==4.1.8
|
199 |
+
jupyterlab-pygments==0.3.0
|
200 |
+
# via nbconvert
|
201 |
+
jupyterlab-server==2.27.1
|
202 |
+
# via jupyterlab
|
203 |
+
keras==3.3.3
|
204 |
+
# via tensorflow
|
205 |
+
kiwisolver==1.4.5
|
206 |
+
# via matplotlib
|
207 |
+
libclang==18.1.1
|
208 |
+
# via tensorflow
|
209 |
+
markdown==3.6
|
210 |
+
# via tensorboard
|
211 |
+
markdown-it-py==3.0.0
|
212 |
+
# via rich
|
213 |
+
markupsafe==2.1.5
|
214 |
+
# via gradio
|
215 |
+
# via jinja2
|
216 |
+
# via nbconvert
|
217 |
+
# via werkzeug
|
218 |
+
matplotlib==3.8.4
|
219 |
+
# via gradio
|
220 |
+
matplotlib-inline==0.1.7
|
221 |
+
# via ipykernel
|
222 |
+
# via ipython
|
223 |
+
mdurl==0.1.2
|
224 |
+
# via markdown-it-py
|
225 |
+
mistune==3.0.2
|
226 |
+
# via nbconvert
|
227 |
+
ml-dtypes==0.3.2
|
228 |
+
# via keras
|
229 |
+
# via tensorflow
|
230 |
+
mpmath==1.3.0
|
231 |
+
# via sympy
|
232 |
+
namex==0.0.8
|
233 |
+
# via keras
|
234 |
+
nbclient==0.10.0
|
235 |
+
# via nbconvert
|
236 |
+
nbconvert==7.16.4
|
237 |
+
# via jupyter-server
|
238 |
+
nbformat==5.10.4
|
239 |
+
# via jupyter-server
|
240 |
+
# via nbclient
|
241 |
+
# via nbconvert
|
242 |
+
nest-asyncio==1.6.0
|
243 |
+
# via ipykernel
|
244 |
+
networkx==3.3
|
245 |
+
# via torch
|
246 |
+
notebook-shim==0.2.4
|
247 |
+
# via jupyterlab
|
248 |
+
numpy==1.26.4
|
249 |
+
# via accelerate
|
250 |
+
# via altair
|
251 |
+
# via contourpy
|
252 |
+
# via gradio
|
253 |
+
# via h5py
|
254 |
+
# via imbalanced-learn
|
255 |
+
# via keras
|
256 |
+
# via matplotlib
|
257 |
+
# via ml-dtypes
|
258 |
+
# via opt-einsum
|
259 |
+
# via pandas
|
260 |
+
# via scikit-learn
|
261 |
+
# via scipy
|
262 |
+
# via tensorboard
|
263 |
+
# via tensorflow
|
264 |
+
# via transformers
|
265 |
+
opt-einsum==3.3.0
|
266 |
+
# via tensorflow
|
267 |
+
optree==0.11.0
|
268 |
+
# via keras
|
269 |
+
orjson==3.10.2
|
270 |
+
# via fastapi
|
271 |
+
# via gradio
|
272 |
+
overrides==7.7.0
|
273 |
+
# via jupyter-server
|
274 |
+
packaging==24.0
|
275 |
+
# via accelerate
|
276 |
+
# via altair
|
277 |
+
# via gradio
|
278 |
+
# via gradio-client
|
279 |
+
# via huggingface-hub
|
280 |
+
# via ipykernel
|
281 |
+
# via jupyter-server
|
282 |
+
# via jupyterlab
|
283 |
+
# via jupyterlab-server
|
284 |
+
# via matplotlib
|
285 |
+
# via nbconvert
|
286 |
+
# via tensorflow
|
287 |
+
# via transformers
|
288 |
+
pandas==2.2.2
|
289 |
+
# via altair
|
290 |
+
# via gradio
|
291 |
+
pandocfilters==1.5.1
|
292 |
+
# via nbconvert
|
293 |
+
parso==0.8.4
|
294 |
+
# via jedi
|
295 |
+
pexpect==4.9.0
|
296 |
+
# via ipython
|
297 |
+
pillow==10.3.0
|
298 |
+
# via gradio
|
299 |
+
# via matplotlib
|
300 |
+
platformdirs==4.2.1
|
301 |
+
# via jupyter-core
|
302 |
+
prometheus-client==0.20.0
|
303 |
+
# via jupyter-server
|
304 |
+
prompt-toolkit==3.0.43
|
305 |
+
# via ipython
|
306 |
+
protobuf==4.25.3
|
307 |
+
# via tensorboard
|
308 |
+
# via tensorflow
|
309 |
+
psutil==5.9.8
|
310 |
+
# via accelerate
|
311 |
+
# via ipykernel
|
312 |
+
ptyprocess==0.7.0
|
313 |
+
# via pexpect
|
314 |
+
# via terminado
|
315 |
+
pure-eval==0.2.2
|
316 |
+
# via stack-data
|
317 |
+
pycparser==2.22
|
318 |
+
# via cffi
|
319 |
+
pydantic==2.7.1
|
320 |
+
# via fastapi
|
321 |
+
# via gradio
|
322 |
+
pydantic-core==2.18.2
|
323 |
+
# via pydantic
|
324 |
+
pydub==0.25.1
|
325 |
+
# via gradio
|
326 |
+
pygments==2.17.2
|
327 |
+
# via ipython
|
328 |
+
# via nbconvert
|
329 |
+
# via rich
|
330 |
+
pyparsing==3.1.2
|
331 |
+
# via matplotlib
|
332 |
+
python-dateutil==2.9.0.post0
|
333 |
+
# via arrow
|
334 |
+
# via jupyter-client
|
335 |
+
# via matplotlib
|
336 |
+
# via pandas
|
337 |
+
python-dotenv==1.0.1
|
338 |
+
# via uvicorn
|
339 |
+
python-json-logger==2.0.7
|
340 |
+
# via jupyter-events
|
341 |
+
python-multipart==0.0.9
|
342 |
+
# via fastapi
|
343 |
+
# via gradio
|
344 |
+
pytz==2024.1
|
345 |
+
# via pandas
|
346 |
+
pyyaml==6.0.1
|
347 |
+
# via accelerate
|
348 |
+
# via gradio
|
349 |
+
# via huggingface-hub
|
350 |
+
# via jupyter-events
|
351 |
+
# via transformers
|
352 |
+
# via uvicorn
|
353 |
+
pyzmq==26.0.3
|
354 |
+
# via ipykernel
|
355 |
+
# via jupyter-client
|
356 |
+
# via jupyter-server
|
357 |
+
referencing==0.35.1
|
358 |
+
# via jsonschema
|
359 |
+
# via jsonschema-specifications
|
360 |
+
# via jupyter-events
|
361 |
+
regex==2024.4.28
|
362 |
+
# via transformers
|
363 |
+
requests==2.31.0
|
364 |
+
# via huggingface-hub
|
365 |
+
# via jupyterlab-server
|
366 |
+
# via tensorflow
|
367 |
+
# via transformers
|
368 |
+
rfc3339-validator==0.1.4
|
369 |
+
# via jsonschema
|
370 |
+
# via jupyter-events
|
371 |
+
rfc3986-validator==0.1.1
|
372 |
+
# via jsonschema
|
373 |
+
# via jupyter-events
|
374 |
+
rich==13.7.1
|
375 |
+
# via keras
|
376 |
+
# via typer
|
377 |
+
rpds-py==0.18.0
|
378 |
+
# via jsonschema
|
379 |
+
# via referencing
|
380 |
+
ruff==0.4.2
|
381 |
+
# via gradio
|
382 |
+
safetensors==0.4.3
|
383 |
+
# via accelerate
|
384 |
+
# via transformers
|
385 |
+
scikit-learn==1.4.2
|
386 |
+
# via imbalanced-learn
|
387 |
+
scipy==1.13.0
|
388 |
+
# via imbalanced-learn
|
389 |
+
# via scikit-learn
|
390 |
+
semantic-version==2.10.0
|
391 |
+
# via gradio
|
392 |
+
send2trash==1.8.3
|
393 |
+
# via jupyter-server
|
394 |
+
setuptools==69.5.1
|
395 |
+
# via tensorboard
|
396 |
+
# via tensorflow
|
397 |
+
shellingham==1.5.4
|
398 |
+
# via typer
|
399 |
+
six==1.16.0
|
400 |
+
# via asttokens
|
401 |
+
# via astunparse
|
402 |
+
# via bleach
|
403 |
+
# via google-pasta
|
404 |
+
# via python-dateutil
|
405 |
+
# via rfc3339-validator
|
406 |
+
# via tensorboard
|
407 |
+
# via tensorflow
|
408 |
+
sniffio==1.3.1
|
409 |
+
# via anyio
|
410 |
+
# via httpx
|
411 |
+
soupsieve==2.5
|
412 |
+
# via beautifulsoup4
|
413 |
+
stack-data==0.6.3
|
414 |
+
# via ipython
|
415 |
+
starlette==0.37.2
|
416 |
+
# via fastapi
|
417 |
+
sympy==1.12
|
418 |
+
# via torch
|
419 |
+
tensorboard==2.16.2
|
420 |
+
# via tensorflow
|
421 |
+
tensorboard-data-server==0.7.2
|
422 |
+
# via tensorboard
|
423 |
+
tensorflow==2.16.1
|
424 |
+
# via tf-keras
|
425 |
+
termcolor==2.4.0
|
426 |
+
# via tensorflow
|
427 |
+
terminado==0.18.1
|
428 |
+
# via jupyter-server
|
429 |
+
# via jupyter-server-terminals
|
430 |
+
tf-keras==2.16.0
|
431 |
+
threadpoolctl==3.5.0
|
432 |
+
# via imbalanced-learn
|
433 |
+
# via scikit-learn
|
434 |
+
tinycss2==1.3.0
|
435 |
+
# via nbconvert
|
436 |
+
tokenizers==0.19.1
|
437 |
+
# via transformers
|
438 |
+
tomlkit==0.12.0
|
439 |
+
# via gradio
|
440 |
+
toolz==0.12.1
|
441 |
+
# via altair
|
442 |
+
torch==2.3.0
|
443 |
+
# via accelerate
|
444 |
+
# via torchaudio
|
445 |
+
# via transformers
|
446 |
+
torchaudio==2.3.0
|
447 |
+
tornado==6.4
|
448 |
+
# via ipykernel
|
449 |
+
# via jupyter-client
|
450 |
+
# via jupyter-server
|
451 |
+
# via jupyterlab
|
452 |
+
# via terminado
|
453 |
+
tqdm==4.66.4
|
454 |
+
# via huggingface-hub
|
455 |
+
# via transformers
|
456 |
+
traitlets==5.14.3
|
457 |
+
# via comm
|
458 |
+
# via ipykernel
|
459 |
+
# via ipython
|
460 |
+
# via jupyter-client
|
461 |
+
# via jupyter-core
|
462 |
+
# via jupyter-events
|
463 |
+
# via jupyter-server
|
464 |
+
# via jupyterlab
|
465 |
+
# via matplotlib-inline
|
466 |
+
# via nbclient
|
467 |
+
# via nbconvert
|
468 |
+
# via nbformat
|
469 |
+
transformers==4.40.1
|
470 |
+
typer==0.12.3
|
471 |
+
# via fastapi-cli
|
472 |
+
# via gradio
|
473 |
+
types-python-dateutil==2.9.0.20240316
|
474 |
+
# via arrow
|
475 |
+
typing-extensions==4.11.0
|
476 |
+
# via fastapi
|
477 |
+
# via gradio
|
478 |
+
# via gradio-client
|
479 |
+
# via huggingface-hub
|
480 |
+
# via optree
|
481 |
+
# via pydantic
|
482 |
+
# via pydantic-core
|
483 |
+
# via tensorflow
|
484 |
+
# via torch
|
485 |
+
# via typer
|
486 |
+
tzdata==2024.1
|
487 |
+
# via pandas
|
488 |
+
ujson==5.9.0
|
489 |
+
# via fastapi
|
490 |
+
uri-template==1.3.0
|
491 |
+
# via jsonschema
|
492 |
+
urllib3==2.2.1
|
493 |
+
# via gradio
|
494 |
+
# via requests
|
495 |
+
uvicorn==0.29.0
|
496 |
+
# via fastapi
|
497 |
+
# via fastapi-cli
|
498 |
+
# via gradio
|
499 |
+
uvloop==0.19.0
|
500 |
+
# via uvicorn
|
501 |
+
watchfiles==0.21.0
|
502 |
+
# via uvicorn
|
503 |
+
wcwidth==0.2.13
|
504 |
+
# via prompt-toolkit
|
505 |
+
webcolors==1.13
|
506 |
+
# via jsonschema
|
507 |
+
webencodings==0.5.1
|
508 |
+
# via bleach
|
509 |
+
# via tinycss2
|
510 |
+
websocket-client==1.8.0
|
511 |
+
# via jupyter-server
|
512 |
+
websockets==11.0.3
|
513 |
+
# via gradio-client
|
514 |
+
# via uvicorn
|
515 |
+
werkzeug==3.0.2
|
516 |
+
# via tensorboard
|
517 |
+
wheel==0.43.0
|
518 |
+
# via astunparse
|
519 |
+
wrapt==1.16.0
|
520 |
+
# via tensorflow
|
requirements.txt
CHANGED
@@ -1,9 +1,520 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# generated by rye
|
2 |
+
# use `rye lock` or `rye sync` to update this lockfile
|
3 |
+
#
|
4 |
+
# last locked with the following flags:
|
5 |
+
# pre: false
|
6 |
+
# features: []
|
7 |
+
# all-features: false
|
8 |
+
# with-sources: false
|
9 |
+
|
10 |
+
absl-py==2.1.0
|
11 |
+
# via keras
|
12 |
+
# via tensorboard
|
13 |
+
# via tensorflow
|
14 |
+
accelerate==0.29.3
|
15 |
+
# via transformers
|
16 |
+
aiofiles==23.2.1
|
17 |
+
# via gradio
|
18 |
+
altair==5.3.0
|
19 |
+
# via gradio
|
20 |
+
annotated-types==0.6.0
|
21 |
+
# via pydantic
|
22 |
+
anyio==4.3.0
|
23 |
+
# via httpx
|
24 |
+
# via jupyter-server
|
25 |
+
# via starlette
|
26 |
+
# via watchfiles
|
27 |
+
appnope==0.1.4
|
28 |
+
# via ipykernel
|
29 |
+
argon2-cffi==23.1.0
|
30 |
+
# via jupyter-server
|
31 |
+
argon2-cffi-bindings==21.2.0
|
32 |
+
# via argon2-cffi
|
33 |
+
arrow==1.3.0
|
34 |
+
# via isoduration
|
35 |
+
asttokens==2.4.1
|
36 |
+
# via stack-data
|
37 |
+
astunparse==1.6.3
|
38 |
+
# via tensorflow
|
39 |
+
async-lru==2.0.4
|
40 |
+
# via jupyterlab
|
41 |
+
attrs==23.2.0
|
42 |
+
# via jsonschema
|
43 |
+
# via referencing
|
44 |
+
babel==2.14.0
|
45 |
+
# via jupyterlab-server
|
46 |
+
beautifulsoup4==4.12.3
|
47 |
+
# via nbconvert
|
48 |
+
bleach==6.1.0
|
49 |
+
# via nbconvert
|
50 |
+
certifi==2024.2.2
|
51 |
+
# via httpcore
|
52 |
+
# via httpx
|
53 |
+
# via requests
|
54 |
+
cffi==1.16.0
|
55 |
+
# via argon2-cffi-bindings
|
56 |
+
charset-normalizer==3.3.2
|
57 |
+
# via requests
|
58 |
+
click==8.1.7
|
59 |
+
# via typer
|
60 |
+
# via uvicorn
|
61 |
+
comm==0.2.2
|
62 |
+
# via ipykernel
|
63 |
+
contourpy==1.2.1
|
64 |
+
# via matplotlib
|
65 |
+
cycler==0.12.1
|
66 |
+
# via matplotlib
|
67 |
+
debugpy==1.8.1
|
68 |
+
# via ipykernel
|
69 |
+
decorator==5.1.1
|
70 |
+
# via ipython
|
71 |
+
defusedxml==0.7.1
|
72 |
+
# via nbconvert
|
73 |
+
dnspython==2.6.1
|
74 |
+
# via email-validator
|
75 |
+
email-validator==2.1.1
|
76 |
+
# via fastapi
|
77 |
+
executing==2.0.1
|
78 |
+
# via stack-data
|
79 |
+
fastapi==0.111.0
|
80 |
+
# via fastapi-cli
|
81 |
+
# via gradio
|
82 |
+
fastapi-cli==0.0.2
|
83 |
+
# via fastapi
|
84 |
+
fastjsonschema==2.19.1
|
85 |
+
# via nbformat
|
86 |
+
ffmpy==0.3.2
|
87 |
+
# via gradio
|
88 |
+
filelock==3.14.0
|
89 |
+
# via huggingface-hub
|
90 |
+
# via torch
|
91 |
+
# via transformers
|
92 |
+
flatbuffers==24.3.25
|
93 |
+
# via tensorflow
|
94 |
+
fonttools==4.51.0
|
95 |
+
# via matplotlib
|
96 |
+
fqdn==1.5.1
|
97 |
+
# via jsonschema
|
98 |
+
fsspec==2024.3.1
|
99 |
+
# via gradio-client
|
100 |
+
# via huggingface-hub
|
101 |
+
# via torch
|
102 |
+
gast==0.5.4
|
103 |
+
# via tensorflow
|
104 |
+
google-pasta==0.2.0
|
105 |
+
# via tensorflow
|
106 |
+
gradio==4.28.3
|
107 |
+
gradio-client==0.16.0
|
108 |
+
# via gradio
|
109 |
+
grpcio==1.63.0
|
110 |
+
# via tensorboard
|
111 |
+
# via tensorflow
|
112 |
+
h11==0.14.0
|
113 |
+
# via httpcore
|
114 |
+
# via uvicorn
|
115 |
+
h5py==3.11.0
|
116 |
+
# via keras
|
117 |
+
# via tensorflow
|
118 |
+
httpcore==1.0.5
|
119 |
+
# via httpx
|
120 |
+
httptools==0.6.1
|
121 |
+
# via uvicorn
|
122 |
+
httpx==0.27.0
|
123 |
+
# via fastapi
|
124 |
+
# via gradio
|
125 |
+
# via gradio-client
|
126 |
+
# via jupyterlab
|
127 |
+
huggingface-hub==0.23.0
|
128 |
+
# via accelerate
|
129 |
+
# via gradio
|
130 |
+
# via gradio-client
|
131 |
+
# via tokenizers
|
132 |
+
# via transformers
|
133 |
+
idna==3.7
|
134 |
+
# via anyio
|
135 |
+
# via email-validator
|
136 |
+
# via httpx
|
137 |
+
# via jsonschema
|
138 |
+
# via requests
|
139 |
+
imbalanced-learn==0.12.2
|
140 |
+
# via imblearn
|
141 |
+
imblearn==0.0
|
142 |
+
importlib-resources==6.4.0
|
143 |
+
# via gradio
|
144 |
+
ipykernel==6.29.4
|
145 |
+
# via jupyterlab
|
146 |
+
ipython==8.24.0
|
147 |
+
# via ipykernel
|
148 |
+
isoduration==20.11.0
|
149 |
+
# via jsonschema
|
150 |
+
jedi==0.19.1
|
151 |
+
# via ipython
|
152 |
+
jinja2==3.1.3
|
153 |
+
# via altair
|
154 |
+
# via fastapi
|
155 |
+
# via gradio
|
156 |
+
# via jupyter-server
|
157 |
+
# via jupyterlab
|
158 |
+
# via jupyterlab-server
|
159 |
+
# via nbconvert
|
160 |
+
# via torch
|
161 |
+
joblib==1.4.2
|
162 |
+
# via imbalanced-learn
|
163 |
+
# via scikit-learn
|
164 |
+
json5==0.9.25
|
165 |
+
# via jupyterlab-server
|
166 |
+
jsonpointer==2.4
|
167 |
+
# via jsonschema
|
168 |
+
jsonschema==4.22.0
|
169 |
+
# via altair
|
170 |
+
# via jupyter-events
|
171 |
+
# via jupyterlab-server
|
172 |
+
# via nbformat
|
173 |
+
jsonschema-specifications==2023.12.1
|
174 |
+
# via jsonschema
|
175 |
+
jupyter-client==8.6.1
|
176 |
+
# via ipykernel
|
177 |
+
# via jupyter-server
|
178 |
+
# via nbclient
|
179 |
+
jupyter-core==5.7.2
|
180 |
+
# via ipykernel
|
181 |
+
# via jupyter-client
|
182 |
+
# via jupyter-server
|
183 |
+
# via jupyterlab
|
184 |
+
# via nbclient
|
185 |
+
# via nbconvert
|
186 |
+
# via nbformat
|
187 |
+
jupyter-events==0.10.0
|
188 |
+
# via jupyter-server
|
189 |
+
jupyter-lsp==2.2.5
|
190 |
+
# via jupyterlab
|
191 |
+
jupyter-server==2.14.0
|
192 |
+
# via jupyter-lsp
|
193 |
+
# via jupyterlab
|
194 |
+
# via jupyterlab-server
|
195 |
+
# via notebook-shim
|
196 |
+
jupyter-server-terminals==0.5.3
|
197 |
+
# via jupyter-server
|
198 |
+
jupyterlab==4.1.8
|
199 |
+
jupyterlab-pygments==0.3.0
|
200 |
+
# via nbconvert
|
201 |
+
jupyterlab-server==2.27.1
|
202 |
+
# via jupyterlab
|
203 |
+
keras==3.3.3
|
204 |
+
# via tensorflow
|
205 |
+
kiwisolver==1.4.5
|
206 |
+
# via matplotlib
|
207 |
+
libclang==18.1.1
|
208 |
+
# via tensorflow
|
209 |
+
markdown==3.6
|
210 |
+
# via tensorboard
|
211 |
+
markdown-it-py==3.0.0
|
212 |
+
# via rich
|
213 |
+
markupsafe==2.1.5
|
214 |
+
# via gradio
|
215 |
+
# via jinja2
|
216 |
+
# via nbconvert
|
217 |
+
# via werkzeug
|
218 |
+
matplotlib==3.8.4
|
219 |
+
# via gradio
|
220 |
+
matplotlib-inline==0.1.7
|
221 |
+
# via ipykernel
|
222 |
+
# via ipython
|
223 |
+
mdurl==0.1.2
|
224 |
+
# via markdown-it-py
|
225 |
+
mistune==3.0.2
|
226 |
+
# via nbconvert
|
227 |
+
ml-dtypes==0.3.2
|
228 |
+
# via keras
|
229 |
+
# via tensorflow
|
230 |
+
mpmath==1.3.0
|
231 |
+
# via sympy
|
232 |
+
namex==0.0.8
|
233 |
+
# via keras
|
234 |
+
nbclient==0.10.0
|
235 |
+
# via nbconvert
|
236 |
+
nbconvert==7.16.4
|
237 |
+
# via jupyter-server
|
238 |
+
nbformat==5.10.4
|
239 |
+
# via jupyter-server
|
240 |
+
# via nbclient
|
241 |
+
# via nbconvert
|
242 |
+
nest-asyncio==1.6.0
|
243 |
+
# via ipykernel
|
244 |
+
networkx==3.3
|
245 |
+
# via torch
|
246 |
+
notebook-shim==0.2.4
|
247 |
+
# via jupyterlab
|
248 |
+
numpy==1.26.4
|
249 |
+
# via accelerate
|
250 |
+
# via altair
|
251 |
+
# via contourpy
|
252 |
+
# via gradio
|
253 |
+
# via h5py
|
254 |
+
# via imbalanced-learn
|
255 |
+
# via keras
|
256 |
+
# via matplotlib
|
257 |
+
# via ml-dtypes
|
258 |
+
# via opt-einsum
|
259 |
+
# via pandas
|
260 |
+
# via scikit-learn
|
261 |
+
# via scipy
|
262 |
+
# via tensorboard
|
263 |
+
# via tensorflow
|
264 |
+
# via transformers
|
265 |
+
opt-einsum==3.3.0
|
266 |
+
# via tensorflow
|
267 |
+
optree==0.11.0
|
268 |
+
# via keras
|
269 |
+
orjson==3.10.2
|
270 |
+
# via fastapi
|
271 |
+
# via gradio
|
272 |
+
overrides==7.7.0
|
273 |
+
# via jupyter-server
|
274 |
+
packaging==24.0
|
275 |
+
# via accelerate
|
276 |
+
# via altair
|
277 |
+
# via gradio
|
278 |
+
# via gradio-client
|
279 |
+
# via huggingface-hub
|
280 |
+
# via ipykernel
|
281 |
+
# via jupyter-server
|
282 |
+
# via jupyterlab
|
283 |
+
# via jupyterlab-server
|
284 |
+
# via matplotlib
|
285 |
+
# via nbconvert
|
286 |
+
# via tensorflow
|
287 |
+
# via transformers
|
288 |
+
pandas==2.2.2
|
289 |
+
# via altair
|
290 |
+
# via gradio
|
291 |
+
pandocfilters==1.5.1
|
292 |
+
# via nbconvert
|
293 |
+
parso==0.8.4
|
294 |
+
# via jedi
|
295 |
+
pexpect==4.9.0
|
296 |
+
# via ipython
|
297 |
+
pillow==10.3.0
|
298 |
+
# via gradio
|
299 |
+
# via matplotlib
|
300 |
+
platformdirs==4.2.1
|
301 |
+
# via jupyter-core
|
302 |
+
prometheus-client==0.20.0
|
303 |
+
# via jupyter-server
|
304 |
+
prompt-toolkit==3.0.43
|
305 |
+
# via ipython
|
306 |
+
protobuf==4.25.3
|
307 |
+
# via tensorboard
|
308 |
+
# via tensorflow
|
309 |
+
psutil==5.9.8
|
310 |
+
# via accelerate
|
311 |
+
# via ipykernel
|
312 |
+
ptyprocess==0.7.0
|
313 |
+
# via pexpect
|
314 |
+
# via terminado
|
315 |
+
pure-eval==0.2.2
|
316 |
+
# via stack-data
|
317 |
+
pycparser==2.22
|
318 |
+
# via cffi
|
319 |
+
pydantic==2.7.1
|
320 |
+
# via fastapi
|
321 |
+
# via gradio
|
322 |
+
pydantic-core==2.18.2
|
323 |
+
# via pydantic
|
324 |
+
pydub==0.25.1
|
325 |
+
# via gradio
|
326 |
+
pygments==2.17.2
|
327 |
+
# via ipython
|
328 |
+
# via nbconvert
|
329 |
+
# via rich
|
330 |
+
pyparsing==3.1.2
|
331 |
+
# via matplotlib
|
332 |
+
python-dateutil==2.9.0.post0
|
333 |
+
# via arrow
|
334 |
+
# via jupyter-client
|
335 |
+
# via matplotlib
|
336 |
+
# via pandas
|
337 |
+
python-dotenv==1.0.1
|
338 |
+
# via uvicorn
|
339 |
+
python-json-logger==2.0.7
|
340 |
+
# via jupyter-events
|
341 |
+
python-multipart==0.0.9
|
342 |
+
# via fastapi
|
343 |
+
# via gradio
|
344 |
+
pytz==2024.1
|
345 |
+
# via pandas
|
346 |
+
pyyaml==6.0.1
|
347 |
+
# via accelerate
|
348 |
+
# via gradio
|
349 |
+
# via huggingface-hub
|
350 |
+
# via jupyter-events
|
351 |
+
# via transformers
|
352 |
+
# via uvicorn
|
353 |
+
pyzmq==26.0.3
|
354 |
+
# via ipykernel
|
355 |
+
# via jupyter-client
|
356 |
+
# via jupyter-server
|
357 |
+
referencing==0.35.1
|
358 |
+
# via jsonschema
|
359 |
+
# via jsonschema-specifications
|
360 |
+
# via jupyter-events
|
361 |
+
regex==2024.4.28
|
362 |
+
# via transformers
|
363 |
+
requests==2.31.0
|
364 |
+
# via huggingface-hub
|
365 |
+
# via jupyterlab-server
|
366 |
+
# via tensorflow
|
367 |
+
# via transformers
|
368 |
+
rfc3339-validator==0.1.4
|
369 |
+
# via jsonschema
|
370 |
+
# via jupyter-events
|
371 |
+
rfc3986-validator==0.1.1
|
372 |
+
# via jsonschema
|
373 |
+
# via jupyter-events
|
374 |
+
rich==13.7.1
|
375 |
+
# via keras
|
376 |
+
# via typer
|
377 |
+
rpds-py==0.18.0
|
378 |
+
# via jsonschema
|
379 |
+
# via referencing
|
380 |
+
ruff==0.4.2
|
381 |
+
# via gradio
|
382 |
+
safetensors==0.4.3
|
383 |
+
# via accelerate
|
384 |
+
# via transformers
|
385 |
+
scikit-learn==1.4.2
|
386 |
+
# via imbalanced-learn
|
387 |
+
scipy==1.13.0
|
388 |
+
# via imbalanced-learn
|
389 |
+
# via scikit-learn
|
390 |
+
semantic-version==2.10.0
|
391 |
+
# via gradio
|
392 |
+
send2trash==1.8.3
|
393 |
+
# via jupyter-server
|
394 |
+
setuptools==69.5.1
|
395 |
+
# via tensorboard
|
396 |
+
# via tensorflow
|
397 |
+
shellingham==1.5.4
|
398 |
+
# via typer
|
399 |
+
six==1.16.0
|
400 |
+
# via asttokens
|
401 |
+
# via astunparse
|
402 |
+
# via bleach
|
403 |
+
# via google-pasta
|
404 |
+
# via python-dateutil
|
405 |
+
# via rfc3339-validator
|
406 |
+
# via tensorboard
|
407 |
+
# via tensorflow
|
408 |
+
sniffio==1.3.1
|
409 |
+
# via anyio
|
410 |
+
# via httpx
|
411 |
+
soupsieve==2.5
|
412 |
+
# via beautifulsoup4
|
413 |
+
stack-data==0.6.3
|
414 |
+
# via ipython
|
415 |
+
starlette==0.37.2
|
416 |
+
# via fastapi
|
417 |
+
sympy==1.12
|
418 |
+
# via torch
|
419 |
+
tensorboard==2.16.2
|
420 |
+
# via tensorflow
|
421 |
+
tensorboard-data-server==0.7.2
|
422 |
+
# via tensorboard
|
423 |
+
tensorflow==2.16.1
|
424 |
+
# via tf-keras
|
425 |
+
termcolor==2.4.0
|
426 |
+
# via tensorflow
|
427 |
+
terminado==0.18.1
|
428 |
+
# via jupyter-server
|
429 |
+
# via jupyter-server-terminals
|
430 |
+
tf-keras==2.16.0
|
431 |
+
threadpoolctl==3.5.0
|
432 |
+
# via imbalanced-learn
|
433 |
+
# via scikit-learn
|
434 |
+
tinycss2==1.3.0
|
435 |
+
# via nbconvert
|
436 |
+
tokenizers==0.19.1
|
437 |
+
# via transformers
|
438 |
+
tomlkit==0.12.0
|
439 |
+
# via gradio
|
440 |
+
toolz==0.12.1
|
441 |
+
# via altair
|
442 |
+
torch==2.3.0
|
443 |
+
# via accelerate
|
444 |
+
# via torchaudio
|
445 |
+
# via transformers
|
446 |
+
torchaudio==2.3.0
|
447 |
+
tornado==6.4
|
448 |
+
# via ipykernel
|
449 |
+
# via jupyter-client
|
450 |
+
# via jupyter-server
|
451 |
+
# via jupyterlab
|
452 |
+
# via terminado
|
453 |
+
tqdm==4.66.4
|
454 |
+
# via huggingface-hub
|
455 |
+
# via transformers
|
456 |
+
traitlets==5.14.3
|
457 |
+
# via comm
|
458 |
+
# via ipykernel
|
459 |
+
# via ipython
|
460 |
+
# via jupyter-client
|
461 |
+
# via jupyter-core
|
462 |
+
# via jupyter-events
|
463 |
+
# via jupyter-server
|
464 |
+
# via jupyterlab
|
465 |
+
# via matplotlib-inline
|
466 |
+
# via nbclient
|
467 |
+
# via nbconvert
|
468 |
+
# via nbformat
|
469 |
+
transformers==4.40.1
|
470 |
+
typer==0.12.3
|
471 |
+
# via fastapi-cli
|
472 |
+
# via gradio
|
473 |
+
types-python-dateutil==2.9.0.20240316
|
474 |
+
# via arrow
|
475 |
+
typing-extensions==4.11.0
|
476 |
+
# via fastapi
|
477 |
+
# via gradio
|
478 |
+
# via gradio-client
|
479 |
+
# via huggingface-hub
|
480 |
+
# via optree
|
481 |
+
# via pydantic
|
482 |
+
# via pydantic-core
|
483 |
+
# via tensorflow
|
484 |
+
# via torch
|
485 |
+
# via typer
|
486 |
+
tzdata==2024.1
|
487 |
+
# via pandas
|
488 |
+
ujson==5.9.0
|
489 |
+
# via fastapi
|
490 |
+
uri-template==1.3.0
|
491 |
+
# via jsonschema
|
492 |
+
urllib3==2.2.1
|
493 |
+
# via gradio
|
494 |
+
# via requests
|
495 |
+
uvicorn==0.29.0
|
496 |
+
# via fastapi
|
497 |
+
# via fastapi-cli
|
498 |
+
# via gradio
|
499 |
+
uvloop==0.19.0
|
500 |
+
# via uvicorn
|
501 |
+
watchfiles==0.21.0
|
502 |
+
# via uvicorn
|
503 |
+
wcwidth==0.2.13
|
504 |
+
# via prompt-toolkit
|
505 |
+
webcolors==1.13
|
506 |
+
# via jsonschema
|
507 |
+
webencodings==0.5.1
|
508 |
+
# via bleach
|
509 |
+
# via tinycss2
|
510 |
+
websocket-client==1.8.0
|
511 |
+
# via jupyter-server
|
512 |
+
websockets==11.0.3
|
513 |
+
# via gradio-client
|
514 |
+
# via uvicorn
|
515 |
+
werkzeug==3.0.2
|
516 |
+
# via tensorboard
|
517 |
+
wheel==0.43.0
|
518 |
+
# via astunparse
|
519 |
+
wrapt==1.16.0
|
520 |
+
# via tensorflow
|
training_data.csv
ADDED
The diff for this file is too large to render.
See raw diff
|
|