diff --git a/kgcnn/backend/_tensorflow.py b/kgcnn/backend/_tensorflow.py
index e2b0689b..11ec554b 100644
--- a/kgcnn/backend/_tensorflow.py
+++ b/kgcnn/backend/_tensorflow.py
@@ -54,4 +54,4 @@ def decompose_ragged_tensor(x, batch_dtype="int64"):
def norm(x, ord='fro', axis=None, keepdims=False):
- return tf.norm(x, ord=ord, dim=axis, keepdims=keepdims)
\ No newline at end of file
+ return tf.norm(x, ord=ord, axis=axis, keepdims=keepdims)
\ No newline at end of file
diff --git a/kgcnn/layers/casting.py b/kgcnn/layers/casting.py
index f7d59887..2c4f4eeb 100644
--- a/kgcnn/layers/casting.py
+++ b/kgcnn/layers/casting.py
@@ -407,7 +407,7 @@ def call(self, inputs: list, **kwargs):
if self.static_output_shape is not None:
target_shape = (ops.shape(attr_len)[0], self.static_output_shape[0])
else:
- target_shape = (ops.shape(attr_len)[0], ops.amax(attr_len))
+ target_shape = (ops.shape(attr_len)[0], ops.cast(ops.amax(attr_len), dtype="int32"))
if not self.padded_disjoint:
if attr_id is None:
diff --git a/kgcnn/literature/GNNExplain/__init__.py b/kgcnn/literature/GNNExplain/__init__.py
index e69de29b..05389503 100644
--- a/kgcnn/literature/GNNExplain/__init__.py
+++ b/kgcnn/literature/GNNExplain/__init__.py
@@ -0,0 +1,7 @@
+from ._model import GNNExplainerOptimizer, GNNInterface, GNNExplainer
+
+__all__ = [
+ "GNNExplainerOptimizer",
+ "GNNInterface",
+ "GNNExplainer"
+]
diff --git a/kgcnn/literature/GNNExplain/_model.py b/kgcnn/literature/GNNExplain/_model.py
index 90db3561..d135e6d6 100644
--- a/kgcnn/literature/GNNExplain/_model.py
+++ b/kgcnn/literature/GNNExplain/_model.py
@@ -194,10 +194,13 @@ def explain(self, graph_instance, output_to_explain=None, inspection=False, **kw
gnnx_optimizer = GNNExplainerOptimizer(
self.gnn, graph_instance, **self.gnnexplaineroptimizer_options)
self.gnnx_optimizer = gnnx_optimizer
+
if output_to_explain is not None:
gnnx_optimizer.output_to_explain = output_to_explain
+
gnnx_optimizer.compile(**self.compile_options)
- gnnx_optimizer.fit(graph_instance, **fit_options)
+
+ gnnx_optimizer.fit(x=graph_instance, y=gnnx_optimizer.output_to_explain, **fit_options)
# Read out information from inspection_callback
if inspection:
@@ -265,21 +268,20 @@ def __init__(self, graph_instance):
self.node_mask_loss = []
def on_epoch_begin(self, epoch, logs=None):
- masked = self.model.call(self.graph_instance).numpy()[0]
+ masked = ops.convert_to_numpy(self.model.call(self.graph_instance))[0]
self.predictions.append(masked)
def on_epoch_end(self, epoch, logs=None):
"""After epoch."""
- index = 0
- losses_list = [loss_iter.numpy() for loss_iter in self.model.losses]
if self.model.edge_mask_loss_weight > 0:
- self.edge_mask_loss.append(losses_list[index])
- index = index + 1
+ self.edge_mask_loss.append(ops.convert_to_numpy(self.model._metric_edge_tracker.result()))
+ self.model._metric_edge_tracker.reset_state()
if self.model.feature_mask_loss_weight > 0:
- self.feature_mask_loss.append(losses_list[index])
- index = index + 1
+ self.feature_mask_loss.append(ops.convert_to_numpy(self.model._metric_feature_tracker.result()))
+ self.model._metric_feature_tracker.reset_state()
if self.model.node_mask_loss_weight > 0:
- self.node_mask_loss.append(losses_list[index])
+ self.node_mask_loss.append(ops.convert_to_numpy(self.model._metric_node_tracker.result()))
+ self.model._metric_node_tracker.reset_state()
self.total_loss.append(logs['loss'])
@@ -320,6 +322,9 @@ def __init__(self, gnn_model, graph_instance,
"""
super(GNNExplainerOptimizer, self).__init__(**kwargs)
self.gnn_model = gnn_model
+ self._metric_node_tracker = ks.metrics.Mean(name="mask_loss")
+ self._metric_edge_tracker = ks.metrics.Mean(name="mask_loss")
+ self._metric_feature_tracker = ks.metrics.Mean(name="mask_loss")
self._edge_mask_dim = self.gnn_model.get_number_of_edges(
graph_instance)
self._feature_mask_dim = self.gnn_model.get_number_of_node_features(
@@ -368,7 +373,7 @@ def call(self, graph_input, training: bool = False, **kwargs):
training (bool): If training mode. Default is False.
Returns:
- tf.tensor: Masked prediction of GNN model.
+ Tensor: Masked prediction of GNN model.
"""
edge_mask = self.get_mask("edge")
feature_mask = self.get_mask("feature")
@@ -377,16 +382,19 @@ def call(self, graph_input, training: bool = False, **kwargs):
# edge_mask loss
if self.edge_mask_loss_weight > 0:
- self.add_loss(lambda: norm(ops.sigmoid(
- self.edge_mask), ord=self.edge_mask_norm_ord) * self.edge_mask_loss_weight)
+ loss = norm(ops.sigmoid(self.edge_mask), ord=self.edge_mask_norm_ord) * self.edge_mask_loss_weight
+ self.add_loss(loss)
+ self._metric_edge_tracker.update_state([loss])
# feature_mask loss
if self.feature_mask_loss_weight > 0:
- self.add_loss(lambda: norm(ops.sigmoid(
- self.feature_mask), ord=self.feature_mask_norm_ord) * self.feature_mask_loss_weight)
+ loss = norm(ops.sigmoid(self.feature_mask), ord=self.feature_mask_norm_ord) * self.feature_mask_loss_weight
+ self.add_loss(loss)
+ self._metric_feature_tracker.update_state([loss])
# node_mask loss
if self.node_mask_loss_weight > 0:
- self.add_loss(lambda: norm(ops.sigmoid(
- self.node_mask), ord=self.node_mask_norm_ord) * self.node_mask_loss_weight)
+ loss = norm(ops.sigmoid(self.node_mask), ord=self.node_mask_norm_ord) * self.node_mask_loss_weight
+ self.add_loss(loss)
+ self._metric_node_tracker.update_state([loss])
return y_pred
diff --git a/notebooks/graph_explanation/explain_GNNExplain_cora.ipynb b/notebooks/graph_explanation/explain_GNNExplain_cora.ipynb
index 209965ca..83bd8332 100644
--- a/notebooks/graph_explanation/explain_GNNExplain_cora.ipynb
+++ b/notebooks/graph_explanation/explain_GNNExplain_cora.ipynb
@@ -5,22 +5,26 @@
"execution_count": 1,
"id": "ebf591c1",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Using TensorFlow backend\n"
+ ]
+ }
+ ],
"source": [
"import time\n",
- "\n",
+ "import keras_core as ks\n",
+ "from keras_core import ops\n",
"import matplotlib.pyplot as plt\n",
"import networkx as nx\n",
"import numpy as np\n",
- "import tensorflow as tf\n",
"from sklearn.model_selection import train_test_split\n",
- "\n",
"from kgcnn.data.datasets.CoraLuDataset import CoraLuDataset\n",
"from kgcnn.literature.GCN import make_model\n",
"from kgcnn.literature.GNNExplain import GNNExplainer, GNNInterface\n",
- "from kgcnn.graph.adj import precompute_adjacency_scaled, sort_edge_indices, make_adjacency_from_edge_indices, \\\n",
- " make_adjacency_undirected_logical_or, convert_scaled_adjacency_to_list\n",
- "from kgcnn.data.utils import ragged_tensor_from_nested_numpy\n",
"from kgcnn.training.scheduler import LinearLearningRateScheduler"
]
},
@@ -53,23 +57,17 @@
],
"source": [
"dataset = CoraLuDataset()\n",
- "nodes, edge_index, labels = dataset.obtain_property(\"node_attributes\"), dataset.obtain_property(\"edge_indices\"), dataset.obtain_property(\"node_labels\")\n",
+ "dataset.map_list(**{\"method\": \"make_undirected_edges\"})\n",
+ "dataset.map_list(**{\"method\": \"add_edge_self_loops\"})\n",
+ "dataset.map_list(**{\"method\": \"normalize_edge_weights_sym\"})\n",
+ "dataset.map_list(**{\"method\": \"count_nodes_and_edges\"})\n",
+ "dataset[0][\"node_attributes\"] = dataset[0][\"node_attributes\"][:, 1:] # remove ids\n",
"class_label_mapping = dataset.class_label_mapping\n",
- "labels = labels[0]\n",
- "nodes = nodes[0][:, 1:] # Remove IDs\n",
- "edge_index = sort_edge_indices(edge_index[0])\n",
- "adj_matrix = make_adjacency_from_edge_indices(edge_index)\n",
- "adj_matrix = precompute_adjacency_scaled(make_adjacency_undirected_logical_or(adj_matrix))\n",
- "edge_index, edge_weight = convert_scaled_adjacency_to_list(adj_matrix)\n",
- "edge_weight = np.expand_dims(edge_weight, axis=-1)\n",
- "# labels = np.expand_dims(labels, axis=-1)\n",
- "# labels = np.array(labels == np.arange(7), dtype=np.float32)\n",
"\n",
"# Find a color to visualize a label\n",
"def get_label_color(label):\n",
" return plt.get_cmap('Set1')(label / 7)\n",
"\n",
- "\n",
"# Map label to class\n",
"def get_label_name(label):\n",
" return [\"Case_Based\",\n",
@@ -92,6 +90,22 @@
{
"cell_type": "code",
"execution_count": 3,
+ "id": "d85f8fff-214b-499b-a17a-26291a2c795e",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "model_inputs = [\n",
+ " {'shape': (None, 1432), 'name': \"node_attributes\", 'dtype': 'float32'},\n",
+ " {'shape': (None, 1), 'name': \"edge_attributes\", 'dtype': 'float32'},\n",
+ " {'shape': (None, 2), 'name': \"edge_indices\", 'dtype': 'int64'},\n",
+ " {\"shape\": (), \"name\": \"total_nodes\", \"dtype\": \"int64\"},\n",
+ " {\"shape\": (), \"name\": \"total_edges\", \"dtype\": \"int64\"}\n",
+ " ]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
"id": "e561f2c8",
"metadata": {},
"outputs": [
@@ -99,7 +113,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "[TensorShape([1, None, 1432]), TensorShape([1, None, 1]), TensorShape([1, None, 2])]\n",
+ "[(1, 2708, 1432), (1, 13264, 1), (1, 13264, 2), (1,), (1,)]\n",
"(1, 2708, 7)\n"
]
}
@@ -108,6 +122,7 @@
"# Make test/train split\n",
"# Since only one graph in the dataset\n",
"# Use a mask to hide test nodes labels\n",
+ "labels = dataset.get(\"node_labels\")[0]\n",
"inds = np.arange(len(labels))\n",
"ind_train, ind_val = train_test_split(inds, test_size=0.10, random_state=0)\n",
"val_mask = np.zeros_like(inds)\n",
@@ -117,12 +132,8 @@
"val_mask = np.expand_dims(val_mask, axis=0) # One graph in batch\n",
"train_mask = np.expand_dims(train_mask, axis=0) # One graph in batch\n",
"\n",
- "# Make ragged graph tensors with 1 graph in batch\n",
- "nodes, edges, edge_indices = ragged_tensor_from_nested_numpy([nodes]), ragged_tensor_from_nested_numpy(\n",
- " [edge_weight]), ragged_tensor_from_nested_numpy([edge_index]) # One graph in batch\n",
- "\n",
"# Set training data. But requires mask and batch-dimension of 1\n",
- "xtrain = nodes, edges, edge_indices\n",
+ "xtrain = dataset.tensor(model_inputs)\n",
"ytrain = np.expand_dims(labels, axis=0) # One graph in batch\n",
"print([x.shape for x in xtrain])\n",
"print(ytrain.shape)"
@@ -138,7 +149,7 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": 5,
"id": "1d611691",
"metadata": {},
"outputs": [
@@ -146,780 +157,211 @@
"name": "stderr",
"output_type": "stream",
"text": [
- "INFO:kgcnn.model.utils:Updated model kwargs:\n",
- "INFO:kgcnn.model.utils:{'name': 'GCN', 'inputs': [{'shape': (None, 1432), 'name': 'node_attributes', 'dtype': 'float32', 'ragged': True}, {'shape': (None, 1), 'name': 'edge_attributes', 'dtype': 'float32', 'ragged': True}, {'shape': (None, 2), 'name': 'edge_indices', 'dtype': 'int64', 'ragged': True}], 'input_embedding': {'node': {'input_dim': 95, 'output_dim': 64}, 'edge': {'input_dim': 10, 'output_dim': 64}}, 'gcn_args': {'units': 124, 'use_bias': True, 'activation': 'relu', 'pooling_method': 'sum'}, 'depth': 3, 'verbose': 10, 'output_embedding': 'node', 'output_to_tensor': True, 'output_mlp': {'use_bias': [True, True, False], 'units': [64, 16, 7], 'activation': ['relu', 'relu', 'softmax']}}\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Model: \"model\"\n",
- "__________________________________________________________________________________________________\n",
- " Layer (type) Output Shape Param # Connected to \n",
- "==================================================================================================\n",
- " node_attributes (InputLayer) [(None, None, 1432) 0 [] \n",
- " ] \n",
- " \n",
- " optional_input_embedding (Opti (None, None, 1432) 0 ['node_attributes[0][0]'] \n",
- " onalInputEmbedding) \n",
- " \n",
- " edge_attributes (InputLayer) [(None, None, 1)] 0 [] \n",
- " \n",
- " dense_embedding (DenseEmbeddin (None, None, 124) 177692 ['optional_input_embedding[0][0]'\n",
- " g) ] \n",
- " \n",
- " optional_input_embedding_1 (Op (None, None, 1) 0 ['edge_attributes[0][0]'] \n",
- " tionalInputEmbedding) \n",
- " \n",
- " edge_indices (InputLayer) [(None, None, 2)] 0 [] \n",
- " \n",
- " gcn (GCN) (None, None, 124) 15500 ['dense_embedding[0][0]', \n",
- " 'optional_input_embedding_1[0][0\n",
- " ]', \n",
- " 'edge_indices[0][0]'] \n",
- " \n",
- " gcn_1 (GCN) (None, None, 124) 15500 ['gcn[0][0]', \n",
- " 'optional_input_embedding_1[0][0\n",
- " ]', \n",
- " 'edge_indices[0][0]'] \n",
- " \n",
- " gcn_2 (GCN) (None, None, 124) 15500 ['gcn_1[0][0]', \n",
- " 'optional_input_embedding_1[0][0\n",
- " ]', \n",
- " 'edge_indices[0][0]'] \n",
- " \n",
- " mlp (MLP) (None, None, 7) 9152 ['gcn_2[0][0]'] \n",
- " \n",
- " change_tensor_type (ChangeTens (None, None, 7) 0 ['mlp[0][0]'] \n",
- " orType) \n",
- " \n",
- "==================================================================================================\n",
- "Total params: 233,344\n",
- "Trainable params: 233,344\n",
- "Non-trainable params: 0\n",
- "__________________________________________________________________________________________________\n",
- "None\n",
- "Epoch 1/10\n"
+ "INFO:kgcnn.models.utils:Updated model kwargs: '{'name': 'GCN', 'inputs': [{'shape': (None, 1432), 'name': 'node_attributes', 'dtype': 'float32'}, {'shape': (None, 1), 'name': 'edge_attributes', 'dtype': 'float32'}, {'shape': (None, 2), 'name': 'edge_indices', 'dtype': 'int64'}, {'shape': (), 'name': 'total_nodes', 'dtype': 'int64'}, {'shape': (), 'name': 'total_edges', 'dtype': 'int64'}], 'input_tensor_type': 'padded', 'input_embedding': None, 'cast_disjoint_kwargs': {}, 'input_node_embedding': {'input_dim': 95, 'output_dim': 64}, 'input_edge_embedding': {'input_dim': 25, 'output_dim': 1}, 'gcn_args': {'units': 124, 'use_bias': True, 'activation': 'relu', 'pooling_method': 'sum'}, 'depth': 3, 'verbose': 10, 'node_pooling_args': {'pooling_method': 'scatter_sum'}, 'output_embedding': 'node', 'output_to_tensor': None, 'output_tensor_type': 'padded', 'output_mlp': {'use_bias': [True, True, False], 'units': [64, 16, 7], 'activation': ['relu', 'relu', 'softmax']}, 'output_scaling': None}'.\n"
]
},
{
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "C:\\Users\\patri\\anaconda3\\envs\\gcnn_keras_test\\lib\\site-packages\\keras\\optimizers\\optimizer_v2\\adam.py:110: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.\n",
- " super(Adam, self).__init__(name, **kwargs)\n",
- "C:\\Users\\patri\\anaconda3\\envs\\gcnn_keras_test\\lib\\site-packages\\tensorflow\\python\\framework\\indexed_slices.py:444: UserWarning: Converting sparse IndexedSlices(IndexedSlices(indices=Tensor(\"gradient_tape/model/change_tensor_type/RaggedToTensor/boolean_mask_1/GatherV2:0\", shape=(None,), dtype=int32), values=Tensor(\"gradient_tape/model/change_tensor_type/RaggedToTensor/boolean_mask/GatherV2:0\", shape=(None, 7), dtype=float32), dense_shape=Tensor(\"gradient_tape/model/change_tensor_type/RaggedToTensor/Shape:0\", shape=(2,), dtype=int32))) to a dense Tensor of unknown shape. This may consume a large amount of memory.\n",
- " warnings.warn(\n",
- "C:\\Users\\patri\\anaconda3\\envs\\gcnn_keras_test\\lib\\site-packages\\tensorflow\\python\\framework\\indexed_slices.py:444: UserWarning: Converting sparse IndexedSlices(IndexedSlices(indices=Tensor(\"gradient_tape/model/gcn_2/pooling_weighted_local_edges_2/Reshape_1:0\", shape=(None,), dtype=int32), values=Tensor(\"gradient_tape/model/gcn_2/pooling_weighted_local_edges_2/Reshape:0\", shape=(None, 124), dtype=float32), dense_shape=Tensor(\"gradient_tape/model/gcn_2/pooling_weighted_local_edges_2/Cast:0\", shape=(2,), dtype=int32))) to a dense Tensor of unknown shape. This may consume a large amount of memory.\n",
- " warnings.warn(\n",
- "C:\\Users\\patri\\anaconda3\\envs\\gcnn_keras_test\\lib\\site-packages\\tensorflow\\python\\framework\\indexed_slices.py:444: UserWarning: Converting sparse IndexedSlices(IndexedSlices(indices=Tensor(\"gradient_tape/model/gcn_2/gather_nodes_outgoing_2/Reshape_1:0\", shape=(None,), dtype=int64), values=Tensor(\"gradient_tape/model/gcn_2/gather_nodes_outgoing_2/Reshape:0\", shape=(None, 124), dtype=float32), dense_shape=Tensor(\"gradient_tape/model/gcn_2/gather_nodes_outgoing_2/Cast:0\", shape=(2,), dtype=int32))) to a dense Tensor of unknown shape. This may consume a large amount of memory.\n",
- " warnings.warn(\n",
- "C:\\Users\\patri\\anaconda3\\envs\\gcnn_keras_test\\lib\\site-packages\\tensorflow\\python\\framework\\indexed_slices.py:444: UserWarning: Converting sparse IndexedSlices(IndexedSlices(indices=Tensor(\"gradient_tape/model/gcn_1/pooling_weighted_local_edges_1/Reshape_1:0\", shape=(None,), dtype=int32), values=Tensor(\"gradient_tape/model/gcn_1/pooling_weighted_local_edges_1/Reshape:0\", shape=(None, 124), dtype=float32), dense_shape=Tensor(\"gradient_tape/model/gcn_1/pooling_weighted_local_edges_1/Cast:0\", shape=(2,), dtype=int32))) to a dense Tensor of unknown shape. This may consume a large amount of memory.\n",
- " warnings.warn(\n",
- "C:\\Users\\patri\\anaconda3\\envs\\gcnn_keras_test\\lib\\site-packages\\tensorflow\\python\\framework\\indexed_slices.py:444: UserWarning: Converting sparse IndexedSlices(IndexedSlices(indices=Tensor(\"gradient_tape/model/gcn_1/gather_nodes_outgoing_1/Reshape_1:0\", shape=(None,), dtype=int64), values=Tensor(\"gradient_tape/model/gcn_1/gather_nodes_outgoing_1/Reshape:0\", shape=(None, 124), dtype=float32), dense_shape=Tensor(\"gradient_tape/model/gcn_1/gather_nodes_outgoing_1/Cast:0\", shape=(2,), dtype=int32))) to a dense Tensor of unknown shape. This may consume a large amount of memory.\n",
- " warnings.warn(\n",
- "C:\\Users\\patri\\anaconda3\\envs\\gcnn_keras_test\\lib\\site-packages\\tensorflow\\python\\framework\\indexed_slices.py:444: UserWarning: Converting sparse IndexedSlices(IndexedSlices(indices=Tensor(\"gradient_tape/model/gcn/pooling_weighted_local_edges/Reshape_1:0\", shape=(None,), dtype=int32), values=Tensor(\"gradient_tape/model/gcn/pooling_weighted_local_edges/Reshape:0\", shape=(None, 124), dtype=float32), dense_shape=Tensor(\"gradient_tape/model/gcn/pooling_weighted_local_edges/Cast:0\", shape=(2,), dtype=int32))) to a dense Tensor of unknown shape. This may consume a large amount of memory.\n",
- " warnings.warn(\n",
- "C:\\Users\\patri\\anaconda3\\envs\\gcnn_keras_test\\lib\\site-packages\\tensorflow\\python\\framework\\indexed_slices.py:444: UserWarning: Converting sparse IndexedSlices(IndexedSlices(indices=Tensor(\"gradient_tape/model/gcn/gather_nodes_outgoing/Reshape_1:0\", shape=(None,), dtype=int64), values=Tensor(\"gradient_tape/model/gcn/gather_nodes_outgoing/Reshape:0\", shape=(None, 124), dtype=float32), dense_shape=Tensor(\"gradient_tape/model/gcn/gather_nodes_outgoing/Cast:0\", shape=(2,), dtype=int32))) to a dense Tensor of unknown shape. This may consume a large amount of memory.\n",
- " warnings.warn(\n"
- ]
+ "data": {
+ "text/html": [
+ "
Model: \"GCN\"\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "\u001b[1mModel: \"GCN\"\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
},
{
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "1/1 - 2s - loss: 1.7499 - categorical_accuracy: 0.2368 - lr: 0.0010 - 2s/epoch - 2s/step\n",
- "Epoch 2/10\n",
- "1/1 - 0s - loss: 1.7431 - categorical_accuracy: 0.3032 - lr: 0.0010 - 32ms/epoch - 32ms/step\n",
- "Epoch 3/10\n",
- "1/1 - 0s - loss: 1.7344 - categorical_accuracy: 0.3028 - lr: 0.0010 - 26ms/epoch - 26ms/step\n",
- "Epoch 4/10\n",
- "1/1 - 0s - loss: 1.7224 - categorical_accuracy: 0.3028 - lr: 0.0010 - 25ms/epoch - 25ms/step\n",
- "Epoch 5/10\n",
- "1/1 - 0s - loss: 1.7070 - categorical_accuracy: 0.3028 - lr: 0.0010 - 24ms/epoch - 24ms/step\n",
- "Epoch 6/10\n",
- "1/1 - 0s - loss: 1.6877 - categorical_accuracy: 0.3028 - lr: 0.0010 - 23ms/epoch - 23ms/step\n",
- "Epoch 7/10\n",
- "1/1 - 0s - loss: 1.6646 - categorical_accuracy: 0.3028 - lr: 0.0010 - 23ms/epoch - 23ms/step\n",
- "Epoch 8/10\n",
- "1/1 - 0s - loss: 1.6373 - categorical_accuracy: 0.3028 - lr: 0.0010 - 23ms/epoch - 23ms/step\n",
- "Epoch 9/10\n",
- "1/1 - 0s - loss: 1.6063 - categorical_accuracy: 0.3028 - lr: 0.0010 - 23ms/epoch - 23ms/step\n",
- "Epoch 10/10\n",
- "1/1 - 0s - loss: 1.5722 - categorical_accuracy: 0.3028 - lr: 0.0010 - 22ms/epoch - 22ms/step\n",
- "1/1 [==============================] - 0s 466ms/step - loss: 0.1714 - categorical_accuracy: 0.2952\n",
- "Epoch 11/20\n",
- "1/1 - 0s - loss: 1.5349 - categorical_accuracy: 0.3028 - lr: 0.0010 - 25ms/epoch - 25ms/step\n",
- "Epoch 12/20\n",
- "1/1 - 0s - loss: 1.4929 - categorical_accuracy: 0.3028 - lr: 0.0010 - 23ms/epoch - 23ms/step\n",
- "Epoch 13/20\n",
- "1/1 - 0s - loss: 1.4469 - categorical_accuracy: 0.3041 - lr: 0.0010 - 24ms/epoch - 24ms/step\n",
- "Epoch 14/20\n",
- "1/1 - 0s - loss: 1.3987 - categorical_accuracy: 0.3410 - lr: 0.0010 - 25ms/epoch - 25ms/step\n",
- "Epoch 15/20\n",
- "1/1 - 0s - loss: 1.3499 - categorical_accuracy: 0.3849 - lr: 0.0010 - 25ms/epoch - 25ms/step\n",
- "Epoch 16/20\n",
- "1/1 - 0s - loss: 1.3010 - categorical_accuracy: 0.4116 - lr: 0.0010 - 25ms/epoch - 25ms/step\n",
- "Epoch 17/20\n",
- "1/1 - 0s - loss: 1.2534 - categorical_accuracy: 0.4407 - lr: 0.0010 - 25ms/epoch - 25ms/step\n",
- "Epoch 18/20\n",
- "1/1 - 0s - loss: 1.2086 - categorical_accuracy: 0.4694 - lr: 0.0010 - 27ms/epoch - 27ms/step\n",
- "Epoch 19/20\n",
- "1/1 - 0s - loss: 1.1671 - categorical_accuracy: 0.4797 - lr: 0.0010 - 24ms/epoch - 24ms/step\n",
- "Epoch 20/20\n",
- "1/1 - 0s - loss: 1.1275 - categorical_accuracy: 0.4846 - lr: 0.0010 - 24ms/epoch - 24ms/step\n",
- "1/1 [==============================] - 0s 27ms/step - loss: 0.1271 - categorical_accuracy: 0.4686\n",
- "Epoch 21/30\n",
- "1/1 - 0s - loss: 1.0871 - categorical_accuracy: 0.4928 - lr: 0.0010 - 23ms/epoch - 23ms/step\n",
- "Epoch 22/30\n",
- "1/1 - 0s - loss: 1.0448 - categorical_accuracy: 0.5150 - lr: 0.0010 - 23ms/epoch - 23ms/step\n",
- "Epoch 23/30\n",
- "1/1 - 0s - loss: 1.0004 - categorical_accuracy: 0.5650 - lr: 0.0010 - 22ms/epoch - 22ms/step\n",
- "Epoch 24/30\n",
- "1/1 - 0s - loss: 0.9543 - categorical_accuracy: 0.6085 - lr: 0.0010 - 23ms/epoch - 23ms/step\n",
- "Epoch 25/30\n",
- "1/1 - 0s - loss: 0.9067 - categorical_accuracy: 0.6512 - lr: 0.0010 - 24ms/epoch - 24ms/step\n",
- "Epoch 26/30\n",
- "1/1 - 0s - loss: 0.8584 - categorical_accuracy: 0.7124 - lr: 0.0010 - 23ms/epoch - 23ms/step\n",
- "Epoch 27/30\n",
- "1/1 - 0s - loss: 0.8097 - categorical_accuracy: 0.7394 - lr: 0.0010 - 23ms/epoch - 23ms/step\n",
- "Epoch 28/30\n",
- "1/1 - 0s - loss: 0.7604 - categorical_accuracy: 0.7714 - lr: 0.0010 - 23ms/epoch - 23ms/step\n",
- "Epoch 29/30\n",
- "1/1 - 0s - loss: 0.7094 - categorical_accuracy: 0.7850 - lr: 0.0010 - 23ms/epoch - 23ms/step\n",
- "Epoch 30/30\n",
- "1/1 - 0s - loss: 0.6531 - categorical_accuracy: 0.7969 - lr: 0.0010 - 24ms/epoch - 24ms/step\n",
- "1/1 [==============================] - 0s 29ms/step - loss: 0.0793 - categorical_accuracy: 0.8081\n",
- "Epoch 31/40\n",
- "1/1 - 0s - loss: 0.5970 - categorical_accuracy: 0.8338 - lr: 0.0010 - 23ms/epoch - 23ms/step\n",
- "Epoch 32/40\n",
- "1/1 - 0s - loss: 0.5481 - categorical_accuracy: 0.8621 - lr: 0.0010 - 24ms/epoch - 24ms/step\n",
- "Epoch 33/40\n",
- "1/1 - 0s - loss: 0.5113 - categorical_accuracy: 0.8461 - lr: 0.0010 - 24ms/epoch - 24ms/step\n",
- "Epoch 34/40\n",
- "1/1 - 0s - loss: 0.4809 - categorical_accuracy: 0.8363 - lr: 0.0010 - 24ms/epoch - 24ms/step\n",
- "Epoch 35/40\n",
- "1/1 - 0s - loss: 0.4544 - categorical_accuracy: 0.8396 - lr: 0.0010 - 23ms/epoch - 23ms/step\n",
- "Epoch 36/40\n",
- "1/1 - 0s - loss: 0.4266 - categorical_accuracy: 0.8515 - lr: 0.0010 - 25ms/epoch - 25ms/step\n",
- "Epoch 37/40\n",
- "1/1 - 0s - loss: 0.3987 - categorical_accuracy: 0.8839 - lr: 0.0010 - 24ms/epoch - 24ms/step\n",
- "Epoch 38/40\n",
- "1/1 - 0s - loss: 0.3832 - categorical_accuracy: 0.8945 - lr: 0.0010 - 24ms/epoch - 24ms/step\n",
- "Epoch 39/40\n",
- "1/1 - 0s - loss: 0.3640 - categorical_accuracy: 0.9019 - lr: 0.0010 - 23ms/epoch - 23ms/step\n",
- "Epoch 40/40\n",
- "1/1 - 0s - loss: 0.3439 - categorical_accuracy: 0.8978 - lr: 0.0010 - 23ms/epoch - 23ms/step\n",
- "1/1 [==============================] - 0s 26ms/step - loss: 0.0580 - categorical_accuracy: 0.8672\n",
- "Epoch 41/50\n",
- "1/1 - 0s - loss: 0.3288 - categorical_accuracy: 0.9007 - lr: 0.0010 - 23ms/epoch - 23ms/step\n",
- "Epoch 42/50\n",
- "1/1 - 0s - loss: 0.3211 - categorical_accuracy: 0.8958 - lr: 0.0010 - 25ms/epoch - 25ms/step\n",
- "Epoch 43/50\n",
- "1/1 - 0s - loss: 0.3227 - categorical_accuracy: 0.8991 - lr: 0.0010 - 24ms/epoch - 24ms/step\n",
- "Epoch 44/50\n",
- "1/1 - 0s - loss: 0.2959 - categorical_accuracy: 0.9052 - lr: 0.0010 - 24ms/epoch - 24ms/step\n",
- "Epoch 45/50\n",
- "1/1 - 0s - loss: 0.2838 - categorical_accuracy: 0.9097 - lr: 0.0010 - 25ms/epoch - 25ms/step\n",
- "Epoch 46/50\n",
- "1/1 - 0s - loss: 0.2830 - categorical_accuracy: 0.9126 - lr: 0.0010 - 25ms/epoch - 25ms/step\n",
- "Epoch 47/50\n",
- "1/1 - 0s - loss: 0.2589 - categorical_accuracy: 0.9151 - lr: 0.0010 - 26ms/epoch - 26ms/step\n",
- "Epoch 48/50\n",
- "1/1 - 0s - loss: 0.2670 - categorical_accuracy: 0.9114 - lr: 0.0010 - 26ms/epoch - 26ms/step\n",
- "Epoch 49/50\n",
- "1/1 - 0s - loss: 0.2408 - categorical_accuracy: 0.9224 - lr: 0.0010 - 25ms/epoch - 25ms/step\n",
- "Epoch 50/50\n",
- "1/1 - 0s - loss: 0.2497 - categorical_accuracy: 0.9175 - lr: 0.0010 - 24ms/epoch - 24ms/step\n",
- "1/1 [==============================] - 0s 26ms/step - loss: 0.0543 - categorical_accuracy: 0.8782\n",
- "Epoch 51/60\n",
- "1/1 - 0s - loss: 0.2291 - categorical_accuracy: 0.9216 - lr: 0.0010 - 36ms/epoch - 36ms/step\n",
- "Epoch 52/60\n",
- "1/1 - 0s - loss: 0.2361 - categorical_accuracy: 0.9188 - lr: 0.0010 - 42ms/epoch - 42ms/step\n",
- "Epoch 53/60\n",
- "1/1 - 0s - loss: 0.2178 - categorical_accuracy: 0.9261 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 54/60\n",
- "1/1 - 0s - loss: 0.2229 - categorical_accuracy: 0.9233 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 55/60\n",
- "1/1 - 0s - loss: 0.2079 - categorical_accuracy: 0.9311 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 56/60\n",
- "1/1 - 0s - loss: 0.2121 - categorical_accuracy: 0.9233 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 57/60\n",
- "1/1 - 0s - loss: 0.2000 - categorical_accuracy: 0.9307 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 58/60\n",
- "1/1 - 0s - loss: 0.2029 - categorical_accuracy: 0.9265 - lr: 0.0010 - 40ms/epoch - 40ms/step\n",
- "Epoch 59/60\n",
- "1/1 - 0s - loss: 0.1914 - categorical_accuracy: 0.9335 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 60/60\n",
- "1/1 - 0s - loss: 0.1929 - categorical_accuracy: 0.9319 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "1/1 [==============================] - 0s 34ms/step - loss: 0.0555 - categorical_accuracy: 0.8745\n",
- "Epoch 61/70\n",
- "1/1 - 0s - loss: 0.1835 - categorical_accuracy: 0.9380 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 62/70\n",
- "1/1 - 0s - loss: 0.1848 - categorical_accuracy: 0.9323 - lr: 0.0010 - 43ms/epoch - 43ms/step\n",
- "Epoch 63/70\n",
- "1/1 - 0s - loss: 0.1768 - categorical_accuracy: 0.9389 - lr: 0.0010 - 40ms/epoch - 40ms/step\n",
- "Epoch 64/70\n",
- "1/1 - 0s - loss: 0.1771 - categorical_accuracy: 0.9360 - lr: 0.0010 - 40ms/epoch - 40ms/step\n",
- "Epoch 65/70\n",
- "1/1 - 0s - loss: 0.1701 - categorical_accuracy: 0.9397 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 66/70\n",
- "1/1 - 0s - loss: 0.1703 - categorical_accuracy: 0.9348 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 67/70\n",
- "1/1 - 0s - loss: 0.1643 - categorical_accuracy: 0.9421 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 68/70\n",
- "1/1 - 0s - loss: 0.1642 - categorical_accuracy: 0.9389 - lr: 0.0010 - 40ms/epoch - 40ms/step\n",
- "Epoch 69/70\n",
- "1/1 - 0s - loss: 0.1588 - categorical_accuracy: 0.9434 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 70/70\n",
- "1/1 - 0s - loss: 0.1579 - categorical_accuracy: 0.9430 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "1/1 [==============================] - 0s 34ms/step - loss: 0.0594 - categorical_accuracy: 0.8745\n",
- "Epoch 71/80\n",
- "1/1 - 0s - loss: 0.1531 - categorical_accuracy: 0.9450 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 72/80\n",
- "1/1 - 0s - loss: 0.1522 - categorical_accuracy: 0.9446 - lr: 0.0010 - 37ms/epoch - 37ms/step\n"
- ]
+ "data": {
+ "text/html": [
+ "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
+ "┃ Layer (type) ┃ Output Shape ┃ Param # ┃ Connected to ┃\n",
+ "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
+ "│ node_attributes (InputLayer) │ (None, None, 1432) │ 0 │ - │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ total_nodes (InputLayer) │ (None) │ 0 │ - │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ cast_batched_attributes_to_d… │ [(None, 1432), (None), │ 0 │ node_attributes[0][0], │\n",
+ "│ (CastBatchedAttributesToDisj… │ (None), (None)] │ │ total_nodes[0][0] │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ edge_attributes (InputLayer) │ (None, None, 1) │ 0 │ - │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ total_edges (InputLayer) │ (None) │ 0 │ - │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ edge_indices (InputLayer) │ (None, None, 2) │ 0 │ - │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ dense (Dense) │ (None, 124) │ 177,692 │ cast_batched_attributes_to_di… │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ cast_batched_attributes_to_d… │ [(None, 1), (None), │ 0 │ edge_attributes[0][0], │\n",
+ "│ (CastBatchedAttributesToDisj… │ (None), (None)] │ │ total_edges[0][0] │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ cast_batched_indices_to_disj… │ [(None, 1432), (2, None), │ 0 │ node_attributes[0][0], │\n",
+ "│ (CastBatchedIndicesToDisjoin… │ (None), (None), (None), │ │ edge_indices[0][0], │\n",
+ "│ │ (None), (None), (None)] │ │ total_nodes[0][0], │\n",
+ "│ │ │ │ total_edges[0][0] │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ gcn (GCN) │ (None, 124) │ 15,500 │ dense[0][0], │\n",
+ "│ │ │ │ cast_batched_attributes_to_di… │\n",
+ "│ │ │ │ cast_batched_indices_to_disjo… │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ gcn_1 (GCN) │ (None, 124) │ 15,500 │ gcn[0][0], │\n",
+ "│ │ │ │ cast_batched_attributes_to_di… │\n",
+ "│ │ │ │ cast_batched_indices_to_disjo… │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ gcn_2 (GCN) │ (None, 124) │ 15,500 │ gcn_1[0][0], │\n",
+ "│ │ │ │ cast_batched_attributes_to_di… │\n",
+ "│ │ │ │ cast_batched_indices_to_disjo… │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ mlp (MLP) │ (None, 7) │ 9,152 │ gcn_2[0][0], │\n",
+ "│ │ │ │ cast_batched_indices_to_disjo… │\n",
+ "│ │ │ │ cast_batched_indices_to_disjo… │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ cast_disjoint_to_batched_att… │ (None, None, 7) │ 0 │ mlp[0][0], │\n",
+ "│ (CastDisjointToBatchedAttrib… │ │ │ cast_batched_indices_to_disjo… │\n",
+ "│ │ │ │ cast_batched_indices_to_disjo… │\n",
+ "│ │ │ │ cast_batched_indices_to_disjo… │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ cast_disjoint_to_batched_gra… │ (None, None, 7) │ 0 │ cast_disjoint_to_batched_attr… │\n",
+ "│ (CastDisjointToBatchedGraphS… │ │ │ │\n",
+ "└───────────────────────────────┴───────────────────────────┴─────────────┴────────────────────────────────┘\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
+ "┃\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┃\u001b[1m \u001b[0m\u001b[1mConnected to \u001b[0m\u001b[1m \u001b[0m┃\n",
+ "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
+ "│ node_attributes (\u001b[38;5;33mInputLayer\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1432\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ - │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ total_nodes (\u001b[38;5;33mInputLayer\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ - │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ cast_batched_attributes_to_d… │ [(\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1432\u001b[0m), (\u001b[38;5;45mNone\u001b[0m), │ \u001b[38;5;34m0\u001b[0m │ node_attributes[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m], │\n",
+ "│ (\u001b[38;5;33mCastBatchedAttributesToDisj…\u001b[0m │ (\u001b[38;5;45mNone\u001b[0m), (\u001b[38;5;45mNone\u001b[0m)] │ │ total_nodes[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ edge_attributes (\u001b[38;5;33mInputLayer\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ - │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ total_edges (\u001b[38;5;33mInputLayer\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ - │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ edge_indices (\u001b[38;5;33mInputLayer\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m2\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ - │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ dense (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m124\u001b[0m) │ \u001b[38;5;34m177,692\u001b[0m │ cast_batched_attributes_to_di… │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ cast_batched_attributes_to_d… │ [(\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m), (\u001b[38;5;45mNone\u001b[0m), │ \u001b[38;5;34m0\u001b[0m │ edge_attributes[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m], │\n",
+ "│ (\u001b[38;5;33mCastBatchedAttributesToDisj…\u001b[0m │ (\u001b[38;5;45mNone\u001b[0m), (\u001b[38;5;45mNone\u001b[0m)] │ │ total_edges[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ cast_batched_indices_to_disj… │ [(\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1432\u001b[0m), (\u001b[38;5;34m2\u001b[0m, \u001b[38;5;45mNone\u001b[0m), │ \u001b[38;5;34m0\u001b[0m │ node_attributes[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m], │\n",
+ "│ (\u001b[38;5;33mCastBatchedIndicesToDisjoin…\u001b[0m │ (\u001b[38;5;45mNone\u001b[0m), (\u001b[38;5;45mNone\u001b[0m), (\u001b[38;5;45mNone\u001b[0m), │ │ edge_indices[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m], │\n",
+ "│ │ (\u001b[38;5;45mNone\u001b[0m), (\u001b[38;5;45mNone\u001b[0m), (\u001b[38;5;45mNone\u001b[0m)] │ │ total_nodes[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m], │\n",
+ "│ │ │ │ total_edges[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ gcn (\u001b[38;5;33mGCN\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m124\u001b[0m) │ \u001b[38;5;34m15,500\u001b[0m │ dense[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m], │\n",
+ "│ │ │ │ cast_batched_attributes_to_di… │\n",
+ "│ │ │ │ cast_batched_indices_to_disjo… │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ gcn_1 (\u001b[38;5;33mGCN\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m124\u001b[0m) │ \u001b[38;5;34m15,500\u001b[0m │ gcn[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m], │\n",
+ "│ │ │ │ cast_batched_attributes_to_di… │\n",
+ "│ │ │ │ cast_batched_indices_to_disjo… │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ gcn_2 (\u001b[38;5;33mGCN\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m124\u001b[0m) │ \u001b[38;5;34m15,500\u001b[0m │ gcn_1[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m], │\n",
+ "│ │ │ │ cast_batched_attributes_to_di… │\n",
+ "│ │ │ │ cast_batched_indices_to_disjo… │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ mlp (\u001b[38;5;33mMLP\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m) │ \u001b[38;5;34m9,152\u001b[0m │ gcn_2[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m], │\n",
+ "│ │ │ │ cast_batched_indices_to_disjo… │\n",
+ "│ │ │ │ cast_batched_indices_to_disjo… │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ cast_disjoint_to_batched_att… │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ mlp[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m], │\n",
+ "│ (\u001b[38;5;33mCastDisjointToBatchedAttrib…\u001b[0m │ │ │ cast_batched_indices_to_disjo… │\n",
+ "│ │ │ │ cast_batched_indices_to_disjo… │\n",
+ "│ │ │ │ cast_batched_indices_to_disjo… │\n",
+ "├───────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────────────┤\n",
+ "│ cast_disjoint_to_batched_gra… │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ cast_disjoint_to_batched_attr… │\n",
+ "│ (\u001b[38;5;33mCastDisjointToBatchedGraphS…\u001b[0m │ │ │ │\n",
+ "└───────────────────────────────┴───────────────────────────┴─────────────┴────────────────────────────────┘\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
},
{
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Epoch 73/80\n",
- "1/1 - 0s - loss: 0.1478 - categorical_accuracy: 0.9483 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 74/80\n",
- "1/1 - 0s - loss: 0.1468 - categorical_accuracy: 0.9479 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 75/80\n",
- "1/1 - 0s - loss: 0.1428 - categorical_accuracy: 0.9503 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 76/80\n",
- "1/1 - 0s - loss: 0.1415 - categorical_accuracy: 0.9454 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 77/80\n",
- "1/1 - 0s - loss: 0.1381 - categorical_accuracy: 0.9508 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 78/80\n",
- "1/1 - 0s - loss: 0.1365 - categorical_accuracy: 0.9528 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 79/80\n",
- "1/1 - 0s - loss: 0.1337 - categorical_accuracy: 0.9495 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 80/80\n",
- "1/1 - 0s - loss: 0.1316 - categorical_accuracy: 0.9516 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "1/1 [==============================] - 0s 34ms/step - loss: 0.0640 - categorical_accuracy: 0.8598\n",
- "Epoch 81/90\n",
- "1/1 - 0s - loss: 0.1297 - categorical_accuracy: 0.9553 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 82/90\n",
- "1/1 - 0s - loss: 0.1271 - categorical_accuracy: 0.9557 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 83/90\n",
- "1/1 - 0s - loss: 0.1257 - categorical_accuracy: 0.9528 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 84/90\n",
- "1/1 - 0s - loss: 0.1231 - categorical_accuracy: 0.9586 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 85/90\n",
- "1/1 - 0s - loss: 0.1218 - categorical_accuracy: 0.9590 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 86/90\n",
- "1/1 - 0s - loss: 0.1203 - categorical_accuracy: 0.9561 - lr: 0.0010 - 40ms/epoch - 40ms/step\n",
- "Epoch 87/90\n",
- "1/1 - 0s - loss: 0.1192 - categorical_accuracy: 0.9594 - lr: 0.0010 - 46ms/epoch - 46ms/step\n",
- "Epoch 88/90\n",
- "1/1 - 0s - loss: 0.1205 - categorical_accuracy: 0.9553 - lr: 0.0010 - 44ms/epoch - 44ms/step\n",
- "Epoch 89/90\n",
- "1/1 - 0s - loss: 0.1225 - categorical_accuracy: 0.9569 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 90/90\n",
- "1/1 - 0s - loss: 0.1267 - categorical_accuracy: 0.9516 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "1/1 [==============================] - 0s 34ms/step - loss: 0.0698 - categorical_accuracy: 0.8487\n",
- "Epoch 91/100\n",
- "1/1 - 0s - loss: 0.1169 - categorical_accuracy: 0.9581 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 92/100\n",
- "1/1 - 0s - loss: 0.1092 - categorical_accuracy: 0.9639 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 93/100\n",
- "1/1 - 0s - loss: 0.1109 - categorical_accuracy: 0.9586 - lr: 0.0010 - 42ms/epoch - 42ms/step\n",
- "Epoch 94/100\n",
- "1/1 - 0s - loss: 0.1113 - categorical_accuracy: 0.9610 - lr: 0.0010 - 41ms/epoch - 41ms/step\n",
- "Epoch 95/100\n",
- "1/1 - 0s - loss: 0.1066 - categorical_accuracy: 0.9639 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 96/100\n",
- "1/1 - 0s - loss: 0.1033 - categorical_accuracy: 0.9622 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 97/100\n",
- "1/1 - 0s - loss: 0.1054 - categorical_accuracy: 0.9622 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 98/100\n",
- "1/1 - 0s - loss: 0.1044 - categorical_accuracy: 0.9618 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 99/100\n",
- "1/1 - 0s - loss: 0.0993 - categorical_accuracy: 0.9639 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 100/100\n",
- "1/1 - 0s - loss: 0.0992 - categorical_accuracy: 0.9647 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "1/1 [==============================] - 0s 38ms/step - loss: 0.0704 - categorical_accuracy: 0.8708\n",
- "Epoch 101/110\n",
- "1/1 - 0s - loss: 0.1005 - categorical_accuracy: 0.9639 - lr: 0.0010 - 42ms/epoch - 42ms/step\n",
- "Epoch 102/110\n",
- "1/1 - 0s - loss: 0.0969 - categorical_accuracy: 0.9655 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 103/110\n",
- "1/1 - 0s - loss: 0.0940 - categorical_accuracy: 0.9664 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 104/110\n",
- "1/1 - 0s - loss: 0.0944 - categorical_accuracy: 0.9655 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 105/110\n",
- "1/1 - 0s - loss: 0.0939 - categorical_accuracy: 0.9659 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 106/110\n",
- "1/1 - 0s - loss: 0.0914 - categorical_accuracy: 0.9651 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 107/110\n",
- "1/1 - 0s - loss: 0.0893 - categorical_accuracy: 0.9672 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 108/110\n",
- "1/1 - 0s - loss: 0.0893 - categorical_accuracy: 0.9680 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 109/110\n",
- "1/1 - 0s - loss: 0.0892 - categorical_accuracy: 0.9668 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 110/110\n",
- "1/1 - 0s - loss: 0.0871 - categorical_accuracy: 0.9688 - lr: 0.0010 - 40ms/epoch - 40ms/step\n",
- "1/1 [==============================] - 0s 35ms/step - loss: 0.0739 - categorical_accuracy: 0.8598\n",
- "Epoch 111/120\n",
- "1/1 - 0s - loss: 0.0849 - categorical_accuracy: 0.9696 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 112/120\n",
- "1/1 - 0s - loss: 0.0841 - categorical_accuracy: 0.9684 - lr: 0.0010 - 43ms/epoch - 43ms/step\n",
- "Epoch 113/120\n",
- "1/1 - 0s - loss: 0.0839 - categorical_accuracy: 0.9705 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 114/120\n",
- "1/1 - 0s - loss: 0.0833 - categorical_accuracy: 0.9705 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 115/120\n",
- "1/1 - 0s - loss: 0.0816 - categorical_accuracy: 0.9713 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 116/120\n",
- "1/1 - 0s - loss: 0.0797 - categorical_accuracy: 0.9713 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 117/120\n",
- "1/1 - 0s - loss: 0.0786 - categorical_accuracy: 0.9721 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 118/120\n",
- "1/1 - 0s - loss: 0.0781 - categorical_accuracy: 0.9725 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 119/120\n",
- "1/1 - 0s - loss: 0.0778 - categorical_accuracy: 0.9721 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 120/120\n",
- "1/1 - 0s - loss: 0.0771 - categorical_accuracy: 0.9737 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "1/1 [==============================] - 0s 39ms/step - loss: 0.0767 - categorical_accuracy: 0.8635\n",
- "Epoch 121/130\n",
- "1/1 - 0s - loss: 0.0763 - categorical_accuracy: 0.9733 - lr: 0.0010 - 45ms/epoch - 45ms/step\n",
- "Epoch 122/130\n",
- "1/1 - 0s - loss: 0.0748 - categorical_accuracy: 0.9746 - lr: 0.0010 - 42ms/epoch - 42ms/step\n",
- "Epoch 123/130\n",
- "1/1 - 0s - loss: 0.0734 - categorical_accuracy: 0.9733 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 124/130\n",
- "1/1 - 0s - loss: 0.0720 - categorical_accuracy: 0.9754 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 125/130\n",
- "1/1 - 0s - loss: 0.0709 - categorical_accuracy: 0.9750 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 126/130\n",
- "1/1 - 0s - loss: 0.0700 - categorical_accuracy: 0.9754 - lr: 0.0010 - 41ms/epoch - 41ms/step\n",
- "Epoch 127/130\n",
- "1/1 - 0s - loss: 0.0692 - categorical_accuracy: 0.9762 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 128/130\n",
- "1/1 - 0s - loss: 0.0686 - categorical_accuracy: 0.9750 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 129/130\n",
- "1/1 - 0s - loss: 0.0685 - categorical_accuracy: 0.9758 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 130/130\n",
- "1/1 - 0s - loss: 0.0693 - categorical_accuracy: 0.9737 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "1/1 [==============================] - 0s 34ms/step - loss: 0.0829 - categorical_accuracy: 0.8450\n",
- "Epoch 131/140\n",
- "1/1 - 0s - loss: 0.0718 - categorical_accuracy: 0.9746 - lr: 0.0010 - 41ms/epoch - 41ms/step\n",
- "Epoch 132/140\n",
- "1/1 - 0s - loss: 0.0738 - categorical_accuracy: 0.9729 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 133/140\n",
- "1/1 - 0s - loss: 0.0740 - categorical_accuracy: 0.9725 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 134/140\n",
- "1/1 - 0s - loss: 0.0687 - categorical_accuracy: 0.9754 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 135/140\n",
- "1/1 - 0s - loss: 0.0632 - categorical_accuracy: 0.9770 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 136/140\n",
- "1/1 - 0s - loss: 0.0624 - categorical_accuracy: 0.9774 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 137/140\n",
- "1/1 - 0s - loss: 0.0646 - categorical_accuracy: 0.9750 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 138/140\n",
- "1/1 - 0s - loss: 0.0653 - categorical_accuracy: 0.9774 - lr: 0.0010 - 44ms/epoch - 44ms/step\n",
- "Epoch 139/140\n",
- "1/1 - 0s - loss: 0.0619 - categorical_accuracy: 0.9754 - lr: 0.0010 - 40ms/epoch - 40ms/step\n",
- "Epoch 140/140\n",
- "1/1 - 0s - loss: 0.0591 - categorical_accuracy: 0.9787 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "1/1 [==============================] - 0s 38ms/step - loss: 0.0857 - categorical_accuracy: 0.8561\n",
- "Epoch 141/150\n",
- "1/1 - 0s - loss: 0.0591 - categorical_accuracy: 0.9807 - lr: 0.0010 - 43ms/epoch - 43ms/step\n",
- "Epoch 142/150\n",
- "1/1 - 0s - loss: 0.0603 - categorical_accuracy: 0.9750 - lr: 0.0010 - 44ms/epoch - 44ms/step\n",
- "Epoch 143/150\n",
- "1/1 - 0s - loss: 0.0605 - categorical_accuracy: 0.9807 - lr: 0.0010 - 41ms/epoch - 41ms/step\n"
- ]
+ "data": {
+ "text/html": [
+ " Total params: 233,344 (911.50 KB)\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m233,344\u001b[0m (911.50 KB)\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
},
{
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Epoch 144/150\n",
- "1/1 - 0s - loss: 0.0582 - categorical_accuracy: 0.9783 - lr: 0.0010 - 40ms/epoch - 40ms/step\n",
- "Epoch 145/150\n",
- "1/1 - 0s - loss: 0.0560 - categorical_accuracy: 0.9815 - lr: 0.0010 - 40ms/epoch - 40ms/step\n",
- "Epoch 146/150\n",
- "1/1 - 0s - loss: 0.0549 - categorical_accuracy: 0.9819 - lr: 0.0010 - 40ms/epoch - 40ms/step\n",
- "Epoch 147/150\n",
- "1/1 - 0s - loss: 0.0551 - categorical_accuracy: 0.9778 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 148/150\n",
- "1/1 - 0s - loss: 0.0558 - categorical_accuracy: 0.9811 - lr: 0.0010 - 40ms/epoch - 40ms/step\n",
- "Epoch 149/150\n",
- "1/1 - 0s - loss: 0.0551 - categorical_accuracy: 0.9783 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 150/150\n",
- "1/1 - 0s - loss: 0.0540 - categorical_accuracy: 0.9815 - lr: 0.0010 - 40ms/epoch - 40ms/step\n",
- "1/1 [==============================] - 0s 37ms/step - loss: 0.0891 - categorical_accuracy: 0.8598\n",
- "Epoch 151/160\n",
- "1/1 - 0s - loss: 0.0519 - categorical_accuracy: 0.9803 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 152/160\n",
- "1/1 - 0s - loss: 0.0509 - categorical_accuracy: 0.9828 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 153/160\n",
- "1/1 - 0s - loss: 0.0507 - categorical_accuracy: 0.9840 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 154/160\n",
- "1/1 - 0s - loss: 0.0508 - categorical_accuracy: 0.9803 - lr: 0.0010 - 40ms/epoch - 40ms/step\n",
- "Epoch 155/160\n",
- "1/1 - 0s - loss: 0.0511 - categorical_accuracy: 0.9828 - lr: 0.0010 - 41ms/epoch - 41ms/step\n",
- "Epoch 156/160\n",
- "1/1 - 0s - loss: 0.0499 - categorical_accuracy: 0.9799 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 157/160\n",
- "1/1 - 0s - loss: 0.0488 - categorical_accuracy: 0.9848 - lr: 0.0010 - 40ms/epoch - 40ms/step\n",
- "Epoch 158/160\n",
- "1/1 - 0s - loss: 0.0472 - categorical_accuracy: 0.9824 - lr: 0.0010 - 41ms/epoch - 41ms/step\n",
- "Epoch 159/160\n",
- "1/1 - 0s - loss: 0.0463 - categorical_accuracy: 0.9840 - lr: 0.0010 - 40ms/epoch - 40ms/step\n",
- "Epoch 160/160\n",
- "1/1 - 0s - loss: 0.0459 - categorical_accuracy: 0.9848 - lr: 0.0010 - 40ms/epoch - 40ms/step\n",
- "1/1 [==============================] - 0s 36ms/step - loss: 0.0933 - categorical_accuracy: 0.8635\n",
- "Epoch 161/170\n",
- "1/1 - 0s - loss: 0.0457 - categorical_accuracy: 0.9836 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 162/170\n",
- "1/1 - 0s - loss: 0.0457 - categorical_accuracy: 0.9865 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 163/170\n",
- "1/1 - 0s - loss: 0.0453 - categorical_accuracy: 0.9848 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 164/170\n",
- "1/1 - 0s - loss: 0.0452 - categorical_accuracy: 0.9865 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 165/170\n",
- "1/1 - 0s - loss: 0.0444 - categorical_accuracy: 0.9848 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 166/170\n",
- "1/1 - 0s - loss: 0.0439 - categorical_accuracy: 0.9869 - lr: 0.0010 - 40ms/epoch - 40ms/step\n",
- "Epoch 167/170\n",
- "1/1 - 0s - loss: 0.0433 - categorical_accuracy: 0.9848 - lr: 0.0010 - 44ms/epoch - 44ms/step\n",
- "Epoch 168/170\n",
- "1/1 - 0s - loss: 0.0432 - categorical_accuracy: 0.9860 - lr: 0.0010 - 45ms/epoch - 45ms/step\n",
- "Epoch 169/170\n",
- "1/1 - 0s - loss: 0.0439 - categorical_accuracy: 0.9856 - lr: 0.0010 - 42ms/epoch - 42ms/step\n",
- "Epoch 170/170\n",
- "1/1 - 0s - loss: 0.0455 - categorical_accuracy: 0.9824 - lr: 0.0010 - 40ms/epoch - 40ms/step\n",
- "1/1 [==============================] - 0s 35ms/step - loss: 0.0975 - categorical_accuracy: 0.8524\n",
- "Epoch 171/180\n",
- "1/1 - 0s - loss: 0.0488 - categorical_accuracy: 0.9844 - lr: 0.0010 - 36ms/epoch - 36ms/step\n",
- "Epoch 172/180\n",
- "1/1 - 0s - loss: 0.0492 - categorical_accuracy: 0.9791 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 173/180\n",
- "1/1 - 0s - loss: 0.0480 - categorical_accuracy: 0.9819 - lr: 0.0010 - 44ms/epoch - 44ms/step\n",
- "Epoch 174/180\n",
- "1/1 - 0s - loss: 0.0413 - categorical_accuracy: 0.9848 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 175/180\n",
- "1/1 - 0s - loss: 0.0395 - categorical_accuracy: 0.9877 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 176/180\n",
- "1/1 - 0s - loss: 0.0421 - categorical_accuracy: 0.9844 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 177/180\n",
- "1/1 - 0s - loss: 0.0414 - categorical_accuracy: 0.9848 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 178/180\n",
- "1/1 - 0s - loss: 0.0379 - categorical_accuracy: 0.9869 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 179/180\n",
- "1/1 - 0s - loss: 0.0370 - categorical_accuracy: 0.9873 - lr: 0.0010 - 40ms/epoch - 40ms/step\n",
- "Epoch 180/180\n",
- "1/1 - 0s - loss: 0.0392 - categorical_accuracy: 0.9852 - lr: 0.0010 - 45ms/epoch - 45ms/step\n",
- "1/1 [==============================] - 0s 39ms/step - loss: 0.1019 - categorical_accuracy: 0.8598\n",
- "Epoch 181/190\n",
- "1/1 - 0s - loss: 0.0388 - categorical_accuracy: 0.9869 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 182/190\n",
- "1/1 - 0s - loss: 0.0360 - categorical_accuracy: 0.9877 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 183/190\n",
- "1/1 - 0s - loss: 0.0362 - categorical_accuracy: 0.9881 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 184/190\n",
- "1/1 - 0s - loss: 0.0378 - categorical_accuracy: 0.9885 - lr: 0.0010 - 45ms/epoch - 45ms/step\n",
- "Epoch 185/190\n",
- "1/1 - 0s - loss: 0.0358 - categorical_accuracy: 0.9881 - lr: 0.0010 - 42ms/epoch - 42ms/step\n",
- "Epoch 186/190\n",
- "1/1 - 0s - loss: 0.0340 - categorical_accuracy: 0.9885 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 187/190\n",
- "1/1 - 0s - loss: 0.0344 - categorical_accuracy: 0.9885 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 188/190\n",
- "1/1 - 0s - loss: 0.0346 - categorical_accuracy: 0.9881 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 189/190\n",
- "1/1 - 0s - loss: 0.0333 - categorical_accuracy: 0.9885 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 190/190\n",
- "1/1 - 0s - loss: 0.0325 - categorical_accuracy: 0.9885 - lr: 0.0010 - 40ms/epoch - 40ms/step\n",
- "1/1 [==============================] - 0s 36ms/step - loss: 0.1085 - categorical_accuracy: 0.8450\n",
- "Epoch 191/200\n",
- "1/1 - 0s - loss: 0.0331 - categorical_accuracy: 0.9897 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 192/200\n",
- "1/1 - 0s - loss: 0.0331 - categorical_accuracy: 0.9889 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 193/200\n",
- "1/1 - 0s - loss: 0.0319 - categorical_accuracy: 0.9893 - lr: 0.0010 - 40ms/epoch - 40ms/step\n",
- "Epoch 194/200\n",
- "1/1 - 0s - loss: 0.0316 - categorical_accuracy: 0.9897 - lr: 0.0010 - 40ms/epoch - 40ms/step\n",
- "Epoch 195/200\n",
- "1/1 - 0s - loss: 0.0322 - categorical_accuracy: 0.9906 - lr: 0.0010 - 40ms/epoch - 40ms/step\n",
- "Epoch 196/200\n",
- "1/1 - 0s - loss: 0.0317 - categorical_accuracy: 0.9897 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 197/200\n",
- "1/1 - 0s - loss: 0.0312 - categorical_accuracy: 0.9906 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 198/200\n",
- "1/1 - 0s - loss: 0.0308 - categorical_accuracy: 0.9889 - lr: 0.0010 - 40ms/epoch - 40ms/step\n",
- "Epoch 199/200\n",
- "1/1 - 0s - loss: 0.0313 - categorical_accuracy: 0.9897 - lr: 0.0010 - 40ms/epoch - 40ms/step\n",
- "Epoch 200/200\n",
- "1/1 - 0s - loss: 0.0315 - categorical_accuracy: 0.9897 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "1/1 [==============================] - 0s 37ms/step - loss: 0.1132 - categorical_accuracy: 0.8487\n",
- "Epoch 201/210\n",
- "1/1 - 0s - loss: 0.0310 - categorical_accuracy: 0.9906 - lr: 0.0010 - 40ms/epoch - 40ms/step\n",
- "Epoch 202/210\n",
- "1/1 - 0s - loss: 0.0301 - categorical_accuracy: 0.9893 - lr: 0.0010 - 42ms/epoch - 42ms/step\n",
- "Epoch 203/210\n",
- "1/1 - 0s - loss: 0.0299 - categorical_accuracy: 0.9906 - lr: 0.0010 - 42ms/epoch - 42ms/step\n",
- "Epoch 204/210\n",
- "1/1 - 0s - loss: 0.0292 - categorical_accuracy: 0.9910 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 205/210\n",
- "1/1 - 0s - loss: 0.0285 - categorical_accuracy: 0.9906 - lr: 0.0010 - 41ms/epoch - 41ms/step\n",
- "Epoch 206/210\n",
- "1/1 - 0s - loss: 0.0276 - categorical_accuracy: 0.9902 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 207/210\n",
- "1/1 - 0s - loss: 0.0274 - categorical_accuracy: 0.9910 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 208/210\n",
- "1/1 - 0s - loss: 0.0278 - categorical_accuracy: 0.9910 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 209/210\n",
- "1/1 - 0s - loss: 0.0277 - categorical_accuracy: 0.9914 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 210/210\n",
- "1/1 - 0s - loss: 0.0277 - categorical_accuracy: 0.9910 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "1/1 [==============================] - 0s 35ms/step - loss: 0.1143 - categorical_accuracy: 0.8487\n",
- "Epoch 211/220\n",
- "1/1 - 0s - loss: 0.0273 - categorical_accuracy: 0.9910 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 212/220\n",
- "1/1 - 0s - loss: 0.0274 - categorical_accuracy: 0.9934 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 213/220\n",
- "1/1 - 0s - loss: 0.0271 - categorical_accuracy: 0.9914 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 214/220\n",
- "1/1 - 0s - loss: 0.0266 - categorical_accuracy: 0.9930 - lr: 0.0010 - 39ms/epoch - 39ms/step\n"
- ]
+ "data": {
+ "text/html": [
+ " Trainable params: 233,344 (911.50 KB)\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m233,344\u001b[0m (911.50 KB)\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
},
{
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Epoch 215/220\n",
- "1/1 - 0s - loss: 0.0257 - categorical_accuracy: 0.9922 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 216/220\n",
- "1/1 - 0s - loss: 0.0251 - categorical_accuracy: 0.9922 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 217/220\n",
- "1/1 - 0s - loss: 0.0249 - categorical_accuracy: 0.9918 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 218/220\n",
- "1/1 - 0s - loss: 0.0248 - categorical_accuracy: 0.9930 - lr: 0.0010 - 36ms/epoch - 36ms/step\n",
- "Epoch 219/220\n",
- "1/1 - 0s - loss: 0.0246 - categorical_accuracy: 0.9926 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 220/220\n",
- "1/1 - 0s - loss: 0.0245 - categorical_accuracy: 0.9918 - lr: 0.0010 - 41ms/epoch - 41ms/step\n",
- "1/1 [==============================] - 0s 34ms/step - loss: 0.1198 - categorical_accuracy: 0.8524\n",
- "Epoch 221/230\n",
- "1/1 - 0s - loss: 0.0249 - categorical_accuracy: 0.9934 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "Epoch 222/230\n",
- "1/1 - 0s - loss: 0.0251 - categorical_accuracy: 0.9914 - lr: 0.0010 - 41ms/epoch - 41ms/step\n",
- "Epoch 223/230\n",
- "1/1 - 0s - loss: 0.0264 - categorical_accuracy: 0.9918 - lr: 0.0010 - 48ms/epoch - 48ms/step\n",
- "Epoch 224/230\n",
- "1/1 - 0s - loss: 0.0269 - categorical_accuracy: 0.9906 - lr: 0.0010 - 49ms/epoch - 49ms/step\n",
- "Epoch 225/230\n",
- "1/1 - 0s - loss: 0.0297 - categorical_accuracy: 0.9902 - lr: 0.0010 - 44ms/epoch - 44ms/step\n",
- "Epoch 226/230\n",
- "1/1 - 0s - loss: 0.0309 - categorical_accuracy: 0.9877 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 227/230\n",
- "1/1 - 0s - loss: 0.0348 - categorical_accuracy: 0.9869 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 228/230\n",
- "1/1 - 0s - loss: 0.0353 - categorical_accuracy: 0.9844 - lr: 0.0010 - 36ms/epoch - 36ms/step\n",
- "Epoch 229/230\n",
- "1/1 - 0s - loss: 0.0346 - categorical_accuracy: 0.9873 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 230/230\n",
- "1/1 - 0s - loss: 0.0283 - categorical_accuracy: 0.9902 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "1/1 [==============================] - 0s 35ms/step - loss: 0.1227 - categorical_accuracy: 0.8487\n",
- "Epoch 231/240\n",
- "1/1 - 0s - loss: 0.0248 - categorical_accuracy: 0.9918 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 232/240\n",
- "1/1 - 0s - loss: 0.0294 - categorical_accuracy: 0.9902 - lr: 0.0010 - 38ms/epoch - 38ms/step\n",
- "Epoch 233/240\n",
- "1/1 - 0s - loss: 0.0258 - categorical_accuracy: 0.9906 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 234/240\n",
- "1/1 - 0s - loss: 0.0223 - categorical_accuracy: 0.9926 - lr: 0.0010 - 36ms/epoch - 36ms/step\n",
- "Epoch 235/240\n",
- "1/1 - 0s - loss: 0.0258 - categorical_accuracy: 0.9922 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 236/240\n",
- "1/1 - 0s - loss: 0.0240 - categorical_accuracy: 0.9918 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 237/240\n",
- "1/1 - 0s - loss: 0.0212 - categorical_accuracy: 0.9926 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 238/240\n",
- "1/1 - 0s - loss: 0.0235 - categorical_accuracy: 0.9934 - lr: 0.0010 - 41ms/epoch - 41ms/step\n",
- "Epoch 239/240\n",
- "1/1 - 0s - loss: 0.0223 - categorical_accuracy: 0.9926 - lr: 0.0010 - 37ms/epoch - 37ms/step\n",
- "Epoch 240/240\n",
- "1/1 - 0s - loss: 0.0206 - categorical_accuracy: 0.9934 - lr: 0.0010 - 39ms/epoch - 39ms/step\n",
- "1/1 [==============================] - 0s 67ms/step - loss: 0.1274 - categorical_accuracy: 0.8487\n",
- "Epoch 241/250\n",
- "1/1 - 0s - loss: 0.0220 - categorical_accuracy: 0.9938 - lr: 0.0010 - 49ms/epoch - 49ms/step\n",
- "Epoch 242/250\n",
- "1/1 - 0s - loss: 0.0209 - categorical_accuracy: 0.9930 - lr: 0.0010 - 46ms/epoch - 46ms/step\n",
- "Epoch 243/250\n",
- "1/1 - 0s - loss: 0.0201 - categorical_accuracy: 0.9938 - lr: 0.0010 - 47ms/epoch - 47ms/step\n",
- "Epoch 244/250\n",
- "1/1 - 0s - loss: 0.0208 - categorical_accuracy: 0.9951 - lr: 0.0010 - 41ms/epoch - 41ms/step\n",
- "Epoch 245/250\n",
- "1/1 - 0s - loss: 0.0199 - categorical_accuracy: 0.9938 - lr: 0.0010 - 41ms/epoch - 41ms/step\n",
- "Epoch 246/250\n",
- "1/1 - 0s - loss: 0.0196 - categorical_accuracy: 0.9943 - lr: 0.0010 - 45ms/epoch - 45ms/step\n",
- "Epoch 247/250\n",
- "1/1 - 0s - loss: 0.0200 - categorical_accuracy: 0.9955 - lr: 0.0010 - 46ms/epoch - 46ms/step\n",
- "Epoch 248/250\n",
- "1/1 - 0s - loss: 0.0192 - categorical_accuracy: 0.9947 - lr: 0.0010 - 50ms/epoch - 50ms/step\n",
- "Epoch 249/250\n",
- "1/1 - 0s - loss: 0.0190 - categorical_accuracy: 0.9955 - lr: 0.0010 - 49ms/epoch - 49ms/step\n",
- "Epoch 250/250\n",
- "1/1 - 0s - loss: 0.0193 - categorical_accuracy: 0.9947 - lr: 0.0010 - 30ms/epoch - 30ms/step\n",
- "1/1 [==============================] - 0s 35ms/step - loss: 0.1292 - categorical_accuracy: 0.8561\n",
- "Epoch 251/260\n",
- "1/1 - 0s - loss: 0.0187 - categorical_accuracy: 0.9951 - lr: 0.0010 - 23ms/epoch - 23ms/step\n",
- "Epoch 252/260\n",
- "1/1 - 0s - loss: 0.0185 - categorical_accuracy: 0.9951 - lr: 0.0010 - 24ms/epoch - 24ms/step\n",
- "Epoch 253/260\n",
- "1/1 - 0s - loss: 0.0187 - categorical_accuracy: 0.9943 - lr: 0.0010 - 25ms/epoch - 25ms/step\n",
- "Epoch 254/260\n",
- "1/1 - 0s - loss: 0.0182 - categorical_accuracy: 0.9943 - lr: 0.0010 - 23ms/epoch - 23ms/step\n",
- "Epoch 255/260\n",
- "1/1 - 0s - loss: 0.0180 - categorical_accuracy: 0.9947 - lr: 0.0010 - 24ms/epoch - 24ms/step\n",
- "Epoch 256/260\n",
- "1/1 - 0s - loss: 0.0181 - categorical_accuracy: 0.9947 - lr: 0.0010 - 24ms/epoch - 24ms/step\n",
- "Epoch 257/260\n",
- "1/1 - 0s - loss: 0.0178 - categorical_accuracy: 0.9947 - lr: 0.0010 - 25ms/epoch - 25ms/step\n",
- "Epoch 258/260\n",
- "1/1 - 0s - loss: 0.0175 - categorical_accuracy: 0.9951 - lr: 0.0010 - 25ms/epoch - 25ms/step\n",
- "Epoch 259/260\n",
- "1/1 - 0s - loss: 0.0174 - categorical_accuracy: 0.9947 - lr: 0.0010 - 27ms/epoch - 27ms/step\n",
- "Epoch 260/260\n",
- "1/1 - 0s - loss: 0.0174 - categorical_accuracy: 0.9951 - lr: 0.0010 - 25ms/epoch - 25ms/step\n",
- "1/1 [==============================] - 0s 28ms/step - loss: 0.1321 - categorical_accuracy: 0.8487\n",
- "Epoch 261/270\n",
- "1/1 - 0s - loss: 0.0171 - categorical_accuracy: 0.9951 - lr: 0.0010 - 22ms/epoch - 22ms/step\n",
- "Epoch 262/270\n",
- "1/1 - 0s - loss: 0.0169 - categorical_accuracy: 0.9955 - lr: 9.7750e-04 - 21ms/epoch - 21ms/step\n",
- "Epoch 263/270\n",
- "1/1 - 0s - loss: 0.0169 - categorical_accuracy: 0.9951 - lr: 9.5500e-04 - 23ms/epoch - 23ms/step\n",
- "Epoch 264/270\n",
- "1/1 - 0s - loss: 0.0168 - categorical_accuracy: 0.9951 - lr: 9.3250e-04 - 25ms/epoch - 25ms/step\n",
- "Epoch 265/270\n",
- "1/1 - 0s - loss: 0.0166 - categorical_accuracy: 0.9963 - lr: 9.1000e-04 - 24ms/epoch - 24ms/step\n",
- "Epoch 266/270\n",
- "1/1 - 0s - loss: 0.0165 - categorical_accuracy: 0.9959 - lr: 8.8750e-04 - 24ms/epoch - 24ms/step\n",
- "Epoch 267/270\n",
- "1/1 - 0s - loss: 0.0164 - categorical_accuracy: 0.9955 - lr: 8.6500e-04 - 23ms/epoch - 23ms/step\n",
- "Epoch 268/270\n",
- "1/1 - 0s - loss: 0.0162 - categorical_accuracy: 0.9967 - lr: 8.4250e-04 - 26ms/epoch - 26ms/step\n",
- "Epoch 269/270\n",
- "1/1 - 0s - loss: 0.0162 - categorical_accuracy: 0.9959 - lr: 8.2000e-04 - 25ms/epoch - 25ms/step\n",
- "Epoch 270/270\n",
- "1/1 - 0s - loss: 0.0160 - categorical_accuracy: 0.9959 - lr: 7.9750e-04 - 23ms/epoch - 23ms/step\n",
- "1/1 [==============================] - 0s 26ms/step - loss: 0.1348 - categorical_accuracy: 0.8487\n",
- "Epoch 271/280\n",
- "1/1 - 0s - loss: 0.0159 - categorical_accuracy: 0.9967 - lr: 7.7500e-04 - 23ms/epoch - 23ms/step\n",
- "Epoch 272/280\n",
- "1/1 - 0s - loss: 0.0159 - categorical_accuracy: 0.9963 - lr: 7.5250e-04 - 21ms/epoch - 21ms/step\n",
- "Epoch 273/280\n",
- "1/1 - 0s - loss: 0.0157 - categorical_accuracy: 0.9963 - lr: 7.3000e-04 - 22ms/epoch - 22ms/step\n",
- "Epoch 274/280\n",
- "1/1 - 0s - loss: 0.0157 - categorical_accuracy: 0.9967 - lr: 7.0750e-04 - 22ms/epoch - 22ms/step\n",
- "Epoch 275/280\n",
- "1/1 - 0s - loss: 0.0156 - categorical_accuracy: 0.9963 - lr: 6.8500e-04 - 25ms/epoch - 25ms/step\n",
- "Epoch 276/280\n",
- "1/1 - 0s - loss: 0.0155 - categorical_accuracy: 0.9967 - lr: 6.6250e-04 - 23ms/epoch - 23ms/step\n",
- "Epoch 277/280\n",
- "1/1 - 0s - loss: 0.0154 - categorical_accuracy: 0.9955 - lr: 6.4000e-04 - 23ms/epoch - 23ms/step\n",
- "Epoch 278/280\n",
- "1/1 - 0s - loss: 0.0153 - categorical_accuracy: 0.9963 - lr: 6.1750e-04 - 25ms/epoch - 25ms/step\n",
- "Epoch 279/280\n",
- "1/1 - 0s - loss: 0.0153 - categorical_accuracy: 0.9963 - lr: 5.9500e-04 - 23ms/epoch - 23ms/step\n",
- "Epoch 280/280\n",
- "1/1 - 0s - loss: 0.0152 - categorical_accuracy: 0.9963 - lr: 5.7250e-04 - 23ms/epoch - 23ms/step\n",
- "1/1 [==============================] - 0s 26ms/step - loss: 0.1367 - categorical_accuracy: 0.8450\n",
- "Epoch 281/290\n",
- "1/1 - 0s - loss: 0.0151 - categorical_accuracy: 0.9963 - lr: 5.5000e-04 - 23ms/epoch - 23ms/step\n",
- "Epoch 282/290\n",
- "1/1 - 0s - loss: 0.0151 - categorical_accuracy: 0.9963 - lr: 5.2750e-04 - 22ms/epoch - 22ms/step\n",
- "Epoch 283/290\n",
- "1/1 - 0s - loss: 0.0150 - categorical_accuracy: 0.9967 - lr: 5.0500e-04 - 22ms/epoch - 22ms/step\n",
- "Epoch 284/290\n",
- "1/1 - 0s - loss: 0.0150 - categorical_accuracy: 0.9967 - lr: 4.8250e-04 - 23ms/epoch - 23ms/step\n"
- ]
+ "data": {
+ "text/html": [
+ " Non-trainable params: 0 (0.00 B)\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Epoch 285/290\n",
- "1/1 - 0s - loss: 0.0149 - categorical_accuracy: 0.9967 - lr: 4.6000e-04 - 23ms/epoch - 23ms/step\n",
- "Epoch 286/290\n",
- "1/1 - 0s - loss: 0.0149 - categorical_accuracy: 0.9967 - lr: 4.3750e-04 - 23ms/epoch - 23ms/step\n",
- "Epoch 287/290\n",
- "1/1 - 0s - loss: 0.0148 - categorical_accuracy: 0.9971 - lr: 4.1500e-04 - 23ms/epoch - 23ms/step\n",
- "Epoch 288/290\n",
- "1/1 - 0s - loss: 0.0148 - categorical_accuracy: 0.9967 - lr: 3.9250e-04 - 26ms/epoch - 26ms/step\n",
- "Epoch 289/290\n",
- "1/1 - 0s - loss: 0.0147 - categorical_accuracy: 0.9967 - lr: 3.7000e-04 - 23ms/epoch - 23ms/step\n",
- "Epoch 290/290\n",
- "1/1 - 0s - loss: 0.0147 - categorical_accuracy: 0.9971 - lr: 3.4750e-04 - 23ms/epoch - 23ms/step\n",
- "1/1 [==============================] - 0s 26ms/step - loss: 0.1381 - categorical_accuracy: 0.8450\n",
- "Epoch 291/300\n",
- "1/1 - 0s - loss: 0.0146 - categorical_accuracy: 0.9971 - lr: 3.2500e-04 - 24ms/epoch - 24ms/step\n",
- "Epoch 292/300\n",
- "1/1 - 0s - loss: 0.0146 - categorical_accuracy: 0.9971 - lr: 3.0250e-04 - 23ms/epoch - 23ms/step\n",
- "Epoch 293/300\n",
- "1/1 - 0s - loss: 0.0146 - categorical_accuracy: 0.9971 - lr: 2.8000e-04 - 23ms/epoch - 23ms/step\n",
- "Epoch 294/300\n",
- "1/1 - 0s - loss: 0.0145 - categorical_accuracy: 0.9971 - lr: 2.5750e-04 - 23ms/epoch - 23ms/step\n",
- "Epoch 295/300\n",
- "1/1 - 0s - loss: 0.0145 - categorical_accuracy: 0.9971 - lr: 2.3500e-04 - 23ms/epoch - 23ms/step\n",
- "Epoch 296/300\n",
- "1/1 - 0s - loss: 0.0145 - categorical_accuracy: 0.9971 - lr: 2.1250e-04 - 23ms/epoch - 23ms/step\n",
- "Epoch 297/300\n",
- "1/1 - 0s - loss: 0.0145 - categorical_accuracy: 0.9971 - lr: 1.9000e-04 - 24ms/epoch - 24ms/step\n",
- "Epoch 298/300\n",
- "1/1 - 0s - loss: 0.0145 - categorical_accuracy: 0.9971 - lr: 1.6750e-04 - 22ms/epoch - 22ms/step\n",
- "Epoch 299/300\n",
- "1/1 - 0s - loss: 0.0144 - categorical_accuracy: 0.9971 - lr: 1.4500e-04 - 22ms/epoch - 22ms/step\n",
- "Epoch 300/300\n",
- "1/1 - 0s - loss: 0.0144 - categorical_accuracy: 0.9971 - lr: 1.2250e-04 - 24ms/epoch - 24ms/step\n",
- "1/1 [==============================] - 0s 32ms/step - loss: 0.1388 - categorical_accuracy: 0.8450\n",
- "Print Time for taining: 23.296875\n"
+ "None\n",
+ "Print Time for taining: 172.5625\n"
]
},
{
"data": {
- "image/png": "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9x0jRoyo8DOXXnopN954IwB33HEHL7/8Mh9//DHDhg0jPT2d//73v3z66acMGzYMgClTpvDpp5/W+HwBnnzyScaMGcMDDzwAQK9evdi4cSP3338/jzzyCHv37mX79u2cd9559OzZE6D0J0BmZibx8fGMHDmS8PBwOnfuzIABA44opopYjaAy8+dTKOFsTjoh2JEYE9JSUlIO2zZjxgyGDBlCp06diImJ4YorrqCgoICNGzdWeqyyhWF8fDxhYWFs2rQp4M8AJCQklH5mxQo3/dlJJ51U+n54eDjJycmVHrMqaWlpDBky5JBtp512Gvn5+axevZrWrVtzww03MGLECEaNGsWTTz7JqlWrSve95JJLKCwspEuXLlx77bW8+eab7N69+4hiqojVCCozfz4/RQ0ktqPd7WnqXm1flQdT8+bND3n93XffcfHFF/PAAw/w9NNP07p1a7799luuueYaCgoKKj2Wv47m4uLian1GRA77jBc385U/pqoesv3VV19l/PjxfPzxx3zyySc88sgjvPjii9x8880kJCTw008/MXfuXD7//HMee+wx7rvvPr777rvSjvjaYjWCihQWwsKFLJDBtG8f7GCMaVjmzZtHu3btePzxxxk0aBC9evWq9v0CtaWPb2r5BQsWlG4rKiri+++/P6Lj9u3bly+//PKQbV999RVRUVF0735wFGK/fv246667mDVrFtdffz1TpkwpfS8yMpKRI0cyadIkli1bxr59+46478IfqxFUJDUV8vP5vMlguncIdjDGNCxHH300W7Zs4bXXXmPYsGHMmzePl19+OSix9OzZk3PPPZdbb72Vv//978TFxfHss8+ya9eugGoJWVlZpJbrzOnUqRMPPPAA5557Lk8++SQXXnghqampTJgwgbvvvpuIiAgyMjJ49dVXOffcc0lKSmLDhg18/fXXHH/88QC89tprFBcXk5KSQmxsLJ999hm7d+8uTVy1yWoEFfFdHcwrPpkOlgiMqVXnnHMODz30EA8++CDHHnss77zzDk8//XTQ4pk2bRr9+vVj1KhRDB06lISEBIYPH06zZs2q/OxDDz3EwIEDD3lMnTqVs846i6lTp/L666/Tr18/fve733HLLbfwxz/+EXDNZenp6YwdO5ZevXoxZswYBg8ezIsvvghA69atmTZtGkOHDqV3794899xzTJkyhTPOOKPWz19K2qxCRXJysi5evNj7XzR2LAVfLSAyN5N334WLL/b+V5rGbeXKlfTu3TvYYRjc0M5jjjmG8847j2effTbY4QSssn9DIvK9qvrtAbemoYrMn8/WnoMhFxISgh2MMcZLX331FZs3b2bgwIHs3r2bv/zlL6xbt45rr7022KHVCUsE/mRnQ3Y2mb75hSwRGNOwHThwgMcff5yMjAzCw8Pp168fc+fO5dhjjw12aHXCEoE/vv6BZS1cIujYMZjBGGO8NmzYsMM6fBsT6yz2Z8ECiIrih+LjaN8eApgfyxhjQpYlAn/mz4eUFLJyw61ZyBjT4FkiKC8vD5YsgcGDWb8eEhODHZAxxnjL00QgIiNFZJWIZIjI/X7eHy0iP4pIqogsFpFTvYwnIIsXQ1ERnHwy69dbR7ExpuHzrLNYRMKAl4DhQA6wSEQ+VNUVZXb7DPhQVVVE+gPvAsd4FRPAtm0QFgYxMeB3gsNv5tME2NH7ZLZutURgjGn4vBw1lAJkqOoaABF5BxgNlCYCVd1TZv/mgKd3t82bB7/6VeX7vMcCetOLY3q2A6BXLy8jMsaY4PMyESQA2WVe5wCDyu8kIhcATwDtgbP9HUhEbgJuAujcuXONA1q92v18+GE3Euiwm6pVGf70fNJ7ns3jF8Gpp0K5WWSNMabB8TIR+Jut6bArflV9D3hPRIYAjwGHrQ2nqlOAKeCmmKhpQCWr4I0fD+3a+dkhYzVM2MKAWwYz4Maa/hZjjAktXnYW5wBlJ81OBDZUtLOqfgUcJSL+iuhaUZIIWrWqYIeYGPjzn8GDSZ2MaahEpNJH165dj+j4PXr0YMKECVXuN2HCBHr06HFEv6ux8rJGsAjoKSLdgPXAWODysjuISA9gta+z+HggAtjmVUA7d0J0NISHV7BDfDz4lpUzxgQmNze39PnChQsZPXo0CxcuLF08JSwsLFihmQB5ViNQ1SLgNmAOsBJ4V1XTRGSciIzz7TYGWC4iqbgRRpeqh9Oh7txZSW3AGFMj8fHxpY82bdoAEBcXV7otKyuLM888k5iYGOLi4rjwwgvJzMws/XxOTg5jxoyhXbt2pYu2lExJPXToUFavXs3EiRNLaxjr1q2rUZy5ubmMHTuW2NhYoqKiGDp0KGVnMi4sLOSuu+4iMTGRyMhIOnbsyNixY0vfT0tLY8SIEcTGxtK8eXN69+7Nm2++WaNY6htP5xpS1ZnAzHLbJpd5/hTwlJcxlGWJwISUBrB6/YoVKzjttNO4++67eeGFFygsLOTRRx9l+PDh/PjjjzRr1oxbbrmFffv28emnnxIbG8vatWtL1y2eMWMGJ5xwAmPGjOGee+4BXJKpLlXl/PPPZ//+/Xz00Ue0atWKxx9/nOHDh5Oenk67du3429/+xrvvvstbb71F9+7d2bRpE998803pMS677DL69evH/PnzadasGatWreLAgQO18ncKtkY16ZwlAmPq1qRJkzjnnHOYOHFi6ba33nqL1q1bM3v2bM4//3wyMzO54IILSheYL9un0KZNG8LCwoiJiSE+Pr7GcXz++ecsXLiQtLS00hW+3njjDbp27crLL7/MH/7wBzIzM+nVqxennXYaIkLnzp058cQTS4+RmZnJXXfdVfr5sstNhjpLBMbUVw1g9fpFixaRkZFBTEzMIdvz8/NJT08H4M477+Tmm29m1qxZDB06lLPPPpshtTxuOy0tjbZt2x6yzGNkZCSDBg0iLS0NgOuuu47hw4fTo0cPhg8fzvDhwzn33HNLF76/5557uOGGG5g+fTpDhw7lvPPOK11WMtQ1qrmGLBEYU7eKi4u56qqrSE1NPeTx888/c8MNNwCuAM7MzGTcuHHk5uYyatQorrzyylqPxd/6w6paun3AgAGsXbuWZ555hoiICMaPH8+AAQPYtWsXAI888gg///wzl1xyCcuXL+ekk07i4YcfrvU4g8ESgTHGM8nJyfz4448cddRR9OjR45BH69atS/fr2LEj1113HW+88QavvfYa//znP0sL4IiIiCNui+/bty9bt25lxYqDM9zs37+fhQsX0rdv39JtMTExXHDBBbzwwgssXryYlStX8uWXX5a+3717d2655Rb+/e9/8+ijj/LKK68cUVz1RaNqGtqxwxKBMXXpwQcfJCUlhSuvvJLx48cTFxfHunXreP/99xk/fjzdu3fntttu46yzzuLoo48mPz+fGTNmkJSURIsWLQDo1q0b33zzDVlZWURHR9OmTRua+J0oDAoKCg5bYKZJkyacfvrppKSkcPnll/PSSy/RqlUrHnvsMfLz8/ntb38LwNNPP02nTp0YMGAA0dHRvP3224SFhdGrVy/27NnDfffdx5gxY+jWrRs7duxg9uzZhzQ1hbJGkwgKC90M05YIjKk7vXv3Zv78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\n",
+ "image/png": "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",
"text/plain": [
- "