Skip to content

ClasCat® AI Research

クラスキャット – 生成 AI, AI エージェント, MCP

Menu
  • ホーム
    • ClassCat® AI Research ホーム
    • クラスキャット・ホーム
  • OpenAI API
    • OpenAI Python ライブラリ 1.x : 概要
    • OpenAI ブログ
      • GPT の紹介
      • GPT ストアの紹介
      • ChatGPT Team の紹介
    • OpenAI platform 1.x
      • Get Started : イントロダクション
      • Get Started : クイックスタート (Python)
      • Get Started : クイックスタート (Node.js)
      • Get Started : モデル
      • 機能 : 埋め込み
      • 機能 : 埋め込み (ユースケース)
      • ChatGPT : アクション – イントロダクション
      • ChatGPT : アクション – Getting started
      • ChatGPT : アクション – アクション認証
    • OpenAI ヘルプ : ChatGPT
      • ChatGPTとは何ですか?
      • ChatGPT は真実を語っていますか?
      • GPT の作成
      • GPT FAQ
      • GPT vs アシスタント
      • GPT ビルダー
    • OpenAI ヘルプ : ChatGPT > メモリ
      • FAQ
    • OpenAI ヘルプ : GPT ストア
      • 貴方の GPT をフィーチャーする
    • OpenAI Python ライブラリ 0.27 : 概要
    • OpenAI platform
      • Get Started : イントロダクション
      • Get Started : クイックスタート
      • Get Started : モデル
      • ガイド : GPT モデル
      • ガイド : 画像生成 (DALL·E)
      • ガイド : GPT-3.5 Turbo 対応 微調整
      • ガイド : 微調整 1.イントロダクション
      • ガイド : 微調整 2. データセットの準備 / ケーススタディ
      • ガイド : 埋め込み
      • ガイド : 音声テキスト変換
      • ガイド : モデレーション
      • ChatGPT プラグイン : イントロダクション
    • OpenAI Cookbook
      • 概要
      • API 使用方法 : レート制限の操作
      • API 使用方法 : tiktoken でトークンを数える方法
      • GPT : ChatGPT モデルへの入力をフォーマットする方法
      • GPT : 補完をストリームする方法
      • GPT : 大規模言語モデルを扱う方法
      • 埋め込み : 埋め込みの取得
      • GPT-3 の微調整 : 分類サンプルの微調整
      • DALL-E : DALL·E で 画像を生成して編集する方法
      • DALL·E と Segment Anything で動的マスクを作成する方法
      • Whisper プロンプティング・ガイド
  • Gemini API
    • Tutorials : クイックスタート with Python (1) テキスト-to-テキスト生成
    • (2) マルチモーダル入力 / 日本語チャット
    • (3) 埋め込みの使用
    • (4) 高度なユースケース
    • クイックスタート with Node.js
    • クイックスタート with Dart or Flutter (1) 日本語動作確認
    • Gemma
      • 概要 (README)
      • Tutorials : サンプリング
      • Tutorials : KerasNLP による Getting Started
  • Keras 3
    • 新しいマルチバックエンド Keras
    • Keras 3 について
    • Getting Started : エンジニアのための Keras 入門
    • Google Colab 上のインストールと Stable Diffusion デモ
    • コンピュータビジョン – ゼロからの画像分類
    • コンピュータビジョン – 単純な MNIST convnet
    • コンピュータビジョン – EfficientNet を使用した微調整による画像分類
    • コンピュータビジョン – Vision Transformer による画像分類
    • コンピュータビジョン – 最新の MLPモデルによる画像分類
    • コンピュータビジョン – コンパクトな畳込み Transformer
    • Keras Core
      • Keras Core 0.1
        • 新しいマルチバックエンド Keras (README)
        • Keras for TensorFlow, JAX, & PyTorch
        • 開発者ガイド : Getting started with Keras Core
        • 開発者ガイド : 関数型 API
        • 開発者ガイド : シーケンシャル・モデル
        • 開発者ガイド : サブクラス化で新しい層とモデルを作成する
        • 開発者ガイド : 独自のコールバックを書く
      • Keras Core 0.1.1 & 0.1.2 : リリースノート
      • 開発者ガイド
      • Code examples
      • Keras Stable Diffusion
        • 概要
        • 基本的な使い方 (テキスト-to-画像 / 画像-to-画像変換)
        • 混合精度のパフォーマンス
        • インペインティングの簡易アプリケーション
        • (参考) KerasCV – Stable Diffusion を使用した高性能画像生成
  • TensorFlow
    • TF 2 : 初級チュートリアル
    • TF 2 : 上級チュートリアル
    • TF 2 : ガイド
    • TF 1 : チュートリアル
    • TF 1 : ガイド
  • その他
    • 🦜️🔗 LangChain ドキュメント / ユースケース
    • Stable Diffusion WebUI
      • Google Colab で Stable Diffusion WebUI 入門
      • HuggingFace モデル / VAE の導入
      • LoRA の利用
    • Diffusion Models / 拡散モデル
  • クラスキャット
    • 会社案内
    • お問合せ
    • Facebook
    • ClassCat® Blog
Menu

Keras 2 : examples : コンピュータビジョン – Involutional ニューラルネットワーク

Posted on 11/24/202111/27/2021 by Sales Information

Keras 2 : examples : Involutional ニューラルネットワーク (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 11/24/2021 (keras 2.7.0)

* 本ページは、Keras の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

  • Code examples : Computer Vision : Involutional neural networks (Author: Aritra Roy Gosthipaty)

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

クラスキャット 人工知能 研究開発支援サービス ★ 無料 Web セミナー開催中 ★

◆ クラスキャットは人工知能・テレワークに関する各種サービスを提供しております。お気軽にご相談ください :

  • 人工知能研究開発支援
    1. 人工知能研修サービス(経営者層向けオンサイト研修)
    2. テクニカルコンサルティングサービス
    3. 実証実験(プロトタイプ構築)
    4. アプリケーションへの実装

  • 人工知能研修サービス

  • PoC(概念実証)を失敗させないための支援

  • テレワーク & オンライン授業を支援
◆ 人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。スケジュール。
  • お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
  • ウェビナー運用には弊社製品「ClassCat® Webinar」を利用しています。

◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。

  • 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
  • E-Mail:sales-info@classcat.com  ;  WebSite: www.classcat.com  ;  Facebook

 

 

Keras 2 : examples : Involutional ニューラルネットワーク

Description: 位置固有 (= location-specific) でチャネル不可知 (= channel-agnostic) な “involution” カーネルの考察。

 

イントロダクション

畳み込みはコンピュータビジョンのための最も現代的なニューラルネットワークの基礎となっています。畳み込みカーネルは空間不可知でチャネル固有です。そのため、異なる空間的位置に関して異なる視覚パターンに適応できません。位置関連問題とともに、畳み込みの受容野は long-range な空間的相互作用を捉えることに関して課題を残します。

上の問題に対処するために、Li et. al. は Involution: Inverting the Inherence of Convolution for VisualRecognition で畳み込みの特性を再考しています。著者は「involution カーネル」を提案しました、これは位置固有でチャネル不可知です。演算の位置固有の特性ゆえに、著者は自己注意は involution のデザインパラダイムには該当するとしています。

このサンプルでは involution カーネルを説明し、畳み込みを使用するものと他方は involution を使用する 2 つの画像分類モデルを比較し、そしてまた自己注意層との比較も試みます。

 

セットアップ

import tensorflow as tf
from tensorflow import keras
import matplotlib.pyplot as plt

# Set seed for reproducibility.
tf.random.set_seed(42)

 

畳み込み

畳み込みはコンピュータビジョン用の深層ニューラルネットワークの中心的存在であり続けています。Involution を理解するには、畳み込み演算について話す必要があります。

次元 H, W と C_in を持つ入力テンソル X を考えます。各々が shape K, K, C_in である、C_out 畳み込みカーネルのコレクションを取ります。入力テンソルとカーネル間の乗算-加算演算により、次元 H, W, C_out を持つ出力テンソル Y を得ます。

上の図では C_out = 3 です。これは shape H, W と 3 の出力テンソルを作成します。畳み込みカーネルは入力テンソルの空間的位置には依存しないことがわかるでしょう、これはそれを位置不可知 (= location-agnostic) にします。その一方で、出力テンソルの各チャネルは特定の畳み込みフィルタに基づいていて、チャネル固有 (= channel-specific) になっています。

 

Involution

アイデアは位置固有 (= location-specific) でチャネル不可知な (= channel-agnostic) 演算を持つことです。これらの特定の特質を実装しようとすると課題が生じます。(各空間的位置に対して) 固定数の involution カーネルでは可変解像度の入力テンソルを処理できません。

この問題を解くために、著者は特定の空間位置に条件付けられた各カーネルを生成することを考えました。この方法で、可変解像度の入力テンソルを容易に処理することができるはずです。下図はこのカーネル生成方法についての直感を提供します。

class Involution(keras.layers.Layer):
    def __init__(
        self, channel, group_number, kernel_size, stride, reduction_ratio, name
    ):
        super().__init__(name=name)

        # Initialize the parameters.
        self.channel = channel
        self.group_number = group_number
        self.kernel_size = kernel_size
        self.stride = stride
        self.reduction_ratio = reduction_ratio

    def build(self, input_shape):
        # Get the shape of the input.
        (_, height, width, num_channels) = input_shape

        # Scale the height and width with respect to the strides.
        height = height // self.stride
        width = width // self.stride

        # Define a layer that average pools the input tensor
        # if stride is more than 1.
        self.stride_layer = (
            keras.layers.AveragePooling2D(
                pool_size=self.stride, strides=self.stride, padding="same"
            )
            if self.stride > 1
            else tf.identity
        )
        # Define the kernel generation layer.
        self.kernel_gen = keras.Sequential(
            [
                keras.layers.Conv2D(
                    filters=self.channel // self.reduction_ratio, kernel_size=1
                ),
                keras.layers.BatchNormalization(),
                keras.layers.ReLU(),
                keras.layers.Conv2D(
                    filters=self.kernel_size * self.kernel_size * self.group_number,
                    kernel_size=1,
                ),
            ]
        )
        # Define reshape layers
        self.kernel_reshape = keras.layers.Reshape(
            target_shape=(
                height,
                width,
                self.kernel_size * self.kernel_size,
                1,
                self.group_number,
            )
        )
        self.input_patches_reshape = keras.layers.Reshape(
            target_shape=(
                height,
                width,
                self.kernel_size * self.kernel_size,
                num_channels // self.group_number,
                self.group_number,
            )
        )
        self.output_reshape = keras.layers.Reshape(
            target_shape=(height, width, num_channels)
        )

    def call(self, x):
        # Generate the kernel with respect to the input tensor.
        # B, H, W, K*K*G
        kernel_input = self.stride_layer(x)
        kernel = self.kernel_gen(kernel_input)

        # reshape the kerenl
        # B, H, W, K*K, 1, G
        kernel = self.kernel_reshape(kernel)

        # Extract input patches.
        # B, H, W, K*K*C
        input_patches = tf.image.extract_patches(
            images=x,
            sizes=[1, self.kernel_size, self.kernel_size, 1],
            strides=[1, self.stride, self.stride, 1],
            rates=[1, 1, 1, 1],
            padding="SAME",
        )

        # Reshape the input patches to align with later operations.
        # B, H, W, K*K, C//G, G
        input_patches = self.input_patches_reshape(input_patches)

        # Compute the multiply-add operation of kernels and patches.
        # B, H, W, K*K, C//G, G
        output = tf.multiply(kernel, input_patches)
        # B, H, W, C//G, G
        output = tf.reduce_sum(output, axis=3)

        # Reshape the output kernel.
        # B, H, W, C
        output = self.output_reshape(output)

        # Return the output tensor and the kernel.
        return output, kernel

 

Involution 層のテスト

# Define the input tensor.
input_tensor = tf.random.normal((32, 256, 256, 3))

# Compute involution with stride 1.
output_tensor, _ = Involution(
    channel=3, group_number=1, kernel_size=5, stride=1, reduction_ratio=1, name="inv_1"
)(input_tensor)
print(f"with stride 1 ouput shape: {output_tensor.shape}")

# Compute involution with stride 2.
output_tensor, _ = Involution(
    channel=3, group_number=1, kernel_size=5, stride=2, reduction_ratio=1, name="inv_2"
)(input_tensor)
print(f"with stride 2 ouput shape: {output_tensor.shape}")

# Compute involution with stride 1, channel 16 and reduction ratio 2.
output_tensor, _ = Involution(
    channel=16, group_number=1, kernel_size=5, stride=1, reduction_ratio=2, name="inv_3"
)(input_tensor)
print(
    "with channel 16 and reduction ratio 2 ouput shape: {}".format(output_tensor.shape)
)
with stride 1 ouput shape: (32, 256, 256, 3)
with stride 2 ouput shape: (32, 128, 128, 3)
with channel 16 and reduction ratio 2 ouput shape: (32, 256, 256, 3)

 

画像分類

このセクションでは、画像分類器モデルを構築します。2 つのモデルがあります、一つは畳み込みを使用して他方は involution を使用します。

画像分類モデルは Google からのこの Convolutional Neural Network (CNN) チュートリアルに大きくインスパイアされています。

 

CIFAR10 データセットの取得

# Load the CIFAR10 dataset.
print("loading the CIFAR10 dataset...")
(train_images, train_labels), (
    test_images,
    test_labels,
) = keras.datasets.cifar10.load_data()

# Normalize pixel values to be between 0 and 1.
(train_images, test_images) = (train_images / 255.0, test_images / 255.0)

# Shuffle and batch the dataset.
train_ds = (
    tf.data.Dataset.from_tensor_slices((train_images, train_labels))
    .shuffle(256)
    .batch(256)
)
test_ds = tf.data.Dataset.from_tensor_slices((test_images, test_labels)).batch(256)
loading the CIFAR10 dataset...
Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz
170500096/170498071 [==============================] - 3s 0us/step

 

データの可視化

class_names = [
    "airplane",
    "automobile",
    "bird",
    "cat",
    "deer",
    "dog",
    "frog",
    "horse",
    "ship",
    "truck",
]

plt.figure(figsize=(10, 10))
for i in range(25):
    plt.subplot(5, 5, i + 1)
    plt.xticks([])
    plt.yticks([])
    plt.grid(False)
    plt.imshow(train_images[i])
    plt.xlabel(class_names[train_labels[i][0]])
plt.show()

 

畳み込みニューラルネットワーク

# Build the conv model.
print("building the convolution model...")
conv_model = keras.Sequential(
    [
        keras.layers.Conv2D(32, (3, 3), input_shape=(32, 32, 3), padding="same"),
        keras.layers.ReLU(name="relu1"),
        keras.layers.MaxPooling2D((2, 2)),
        keras.layers.Conv2D(64, (3, 3), padding="same"),
        keras.layers.ReLU(name="relu2"),
        keras.layers.MaxPooling2D((2, 2)),
        keras.layers.Conv2D(64, (3, 3), padding="same"),
        keras.layers.ReLU(name="relu3"),
        keras.layers.Flatten(),
        keras.layers.Dense(64, activation="relu"),
        keras.layers.Dense(10),
    ]
)

# Compile the mode with the necessary loss function and optimizer.
print("compiling the convolution model...")
conv_model.compile(
    optimizer="adam",
    loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
    metrics=["accuracy"],
)

# Train the model.
print("conv model training...")
conv_hist = conv_model.fit(train_ds, epochs=20, validation_data=test_ds)
building the convolution model...
compiling the convolution model...
conv model training...
Epoch 1/20
196/196 [==============================] - 16s 16ms/step - loss: 1.6367 - accuracy: 0.4041 - val_loss: 1.3283 - val_accuracy: 0.5275
Epoch 2/20
196/196 [==============================] - 3s 16ms/step - loss: 1.2207 - accuracy: 0.5675 - val_loss: 1.1365 - val_accuracy: 0.5965
Epoch 3/20
196/196 [==============================] - 3s 16ms/step - loss: 1.0649 - accuracy: 0.6267 - val_loss: 1.0219 - val_accuracy: 0.6378
Epoch 4/20
196/196 [==============================] - 3s 16ms/step - loss: 0.9642 - accuracy: 0.6613 - val_loss: 0.9741 - val_accuracy: 0.6601
Epoch 5/20
196/196 [==============================] - 3s 16ms/step - loss: 0.8779 - accuracy: 0.6939 - val_loss: 0.9145 - val_accuracy: 0.6826
Epoch 6/20
196/196 [==============================] - 3s 16ms/step - loss: 0.8126 - accuracy: 0.7180 - val_loss: 0.8841 - val_accuracy: 0.6913
Epoch 7/20
196/196 [==============================] - 3s 16ms/step - loss: 0.7641 - accuracy: 0.7334 - val_loss: 0.8667 - val_accuracy: 0.7049
Epoch 8/20
196/196 [==============================] - 3s 16ms/step - loss: 0.7210 - accuracy: 0.7503 - val_loss: 0.8363 - val_accuracy: 0.7089
Epoch 9/20
196/196 [==============================] - 3s 16ms/step - loss: 0.6796 - accuracy: 0.7630 - val_loss: 0.8150 - val_accuracy: 0.7203
Epoch 10/20
196/196 [==============================] - 3s 15ms/step - loss: 0.6370 - accuracy: 0.7793 - val_loss: 0.9021 - val_accuracy: 0.6964
Epoch 11/20
196/196 [==============================] - 3s 15ms/step - loss: 0.6089 - accuracy: 0.7886 - val_loss: 0.8336 - val_accuracy: 0.7207
Epoch 12/20
196/196 [==============================] - 3s 15ms/step - loss: 0.5723 - accuracy: 0.8022 - val_loss: 0.8326 - val_accuracy: 0.7246
Epoch 13/20
196/196 [==============================] - 3s 15ms/step - loss: 0.5375 - accuracy: 0.8144 - val_loss: 0.8482 - val_accuracy: 0.7223
Epoch 14/20
196/196 [==============================] - 3s 15ms/step - loss: 0.5121 - accuracy: 0.8230 - val_loss: 0.8244 - val_accuracy: 0.7306
Epoch 15/20
196/196 [==============================] - 3s 15ms/step - loss: 0.4786 - accuracy: 0.8363 - val_loss: 0.8313 - val_accuracy: 0.7363
Epoch 16/20
196/196 [==============================] - 3s 15ms/step - loss: 0.4518 - accuracy: 0.8458 - val_loss: 0.8634 - val_accuracy: 0.7293
Epoch 17/20
196/196 [==============================] - 3s 16ms/step - loss: 0.4403 - accuracy: 0.8489 - val_loss: 0.8683 - val_accuracy: 0.7290
Epoch 18/20
196/196 [==============================] - 3s 16ms/step - loss: 0.4094 - accuracy: 0.8576 - val_loss: 0.8982 - val_accuracy: 0.7272
Epoch 19/20
196/196 [==============================] - 3s 16ms/step - loss: 0.3941 - accuracy: 0.8630 - val_loss: 0.9537 - val_accuracy: 0.7200
Epoch 20/20
196/196 [==============================] - 3s 15ms/step - loss: 0.3778 - accuracy: 0.8691 - val_loss: 0.9780 - val_accuracy: 0.7184

(訳者注: 実験結果)

building the convolution model...
compiling the convolution model...
conv model training...
Epoch 1/20
196/196 [==============================] - 9s 12ms/step - loss: 1.6219 - accuracy: 0.4134 - val_loss: 1.3170 - val_accuracy: 0.5361
Epoch 2/20
196/196 [==============================] - 2s 11ms/step - loss: 1.2299 - accuracy: 0.5659 - val_loss: 1.1324 - val_accuracy: 0.6057
Epoch 3/20
196/196 [==============================] - 2s 11ms/step - loss: 1.0730 - accuracy: 0.6240 - val_loss: 1.0566 - val_accuracy: 0.6258
Epoch 4/20
196/196 [==============================] - 2s 10ms/step - loss: 0.9593 - accuracy: 0.6676 - val_loss: 0.9721 - val_accuracy: 0.6584
Epoch 5/20
196/196 [==============================] - 2s 10ms/step - loss: 0.8794 - accuracy: 0.6960 - val_loss: 0.9271 - val_accuracy: 0.6794
Epoch 6/20
196/196 [==============================] - 2s 10ms/step - loss: 0.8148 - accuracy: 0.7176 - val_loss: 0.9062 - val_accuracy: 0.6810
Epoch 7/20
196/196 [==============================] - 2s 10ms/step - loss: 0.7652 - accuracy: 0.7359 - val_loss: 0.8682 - val_accuracy: 0.6990
Epoch 8/20
196/196 [==============================] - 2s 10ms/step - loss: 0.7169 - accuracy: 0.7526 - val_loss: 0.8479 - val_accuracy: 0.7084
Epoch 9/20
196/196 [==============================] - 2s 10ms/step - loss: 0.6712 - accuracy: 0.7685 - val_loss: 0.8626 - val_accuracy: 0.7068
Epoch 10/20
196/196 [==============================] - 2s 11ms/step - loss: 0.6401 - accuracy: 0.7791 - val_loss: 0.8523 - val_accuracy: 0.7147
Epoch 11/20
196/196 [==============================] - 2s 10ms/step - loss: 0.5960 - accuracy: 0.7953 - val_loss: 0.8417 - val_accuracy: 0.7189
Epoch 12/20
196/196 [==============================] - 2s 11ms/step - loss: 0.5614 - accuracy: 0.8058 - val_loss: 0.8639 - val_accuracy: 0.7193
Epoch 13/20
196/196 [==============================] - 2s 10ms/step - loss: 0.5282 - accuracy: 0.8192 - val_loss: 0.9017 - val_accuracy: 0.7144
Epoch 14/20
196/196 [==============================] - 2s 10ms/step - loss: 0.4888 - accuracy: 0.8326 - val_loss: 0.8822 - val_accuracy: 0.7241
Epoch 15/20
196/196 [==============================] - 2s 10ms/step - loss: 0.4693 - accuracy: 0.8399 - val_loss: 0.9730 - val_accuracy: 0.7036
Epoch 16/20
196/196 [==============================] - 2s 10ms/step - loss: 0.4458 - accuracy: 0.8470 - val_loss: 0.9329 - val_accuracy: 0.7152
Epoch 17/20
196/196 [==============================] - 2s 10ms/step - loss: 0.4088 - accuracy: 0.8604 - val_loss: 0.9590 - val_accuracy: 0.7180
Epoch 18/20
196/196 [==============================] - 2s 10ms/step - loss: 0.3978 - accuracy: 0.8639 - val_loss: 0.9674 - val_accuracy: 0.7164
Epoch 19/20
196/196 [==============================] - 2s 10ms/step - loss: 0.3741 - accuracy: 0.8721 - val_loss: 0.9584 - val_accuracy: 0.7178
Epoch 20/20
196/196 [==============================] - 2s 10ms/step - loss: 0.3445 - accuracy: 0.8823 - val_loss: 0.9994 - val_accuracy: 0.7097
CPU times: user 56.4 s, sys: 3.55 s, total: 59.9 s
Wall time: 57.9 s

 

Involutional ニューラルネットワーク

# Build the involution model.
print("building the involution model...")

inputs = keras.Input(shape=(32, 32, 3))
x, _ = Involution(
    channel=3, group_number=1, kernel_size=3, stride=1, reduction_ratio=2, name="inv_1"
)(inputs)
x = keras.layers.ReLU()(x)
x = keras.layers.MaxPooling2D((2, 2))(x)
x, _ = Involution(
    channel=3, group_number=1, kernel_size=3, stride=1, reduction_ratio=2, name="inv_2"
)(x)
x = keras.layers.ReLU()(x)
x = keras.layers.MaxPooling2D((2, 2))(x)
x, _ = Involution(
    channel=3, group_number=1, kernel_size=3, stride=1, reduction_ratio=2, name="inv_3"
)(x)
x = keras.layers.ReLU()(x)
x = keras.layers.Flatten()(x)
x = keras.layers.Dense(64, activation="relu")(x)
outputs = keras.layers.Dense(10)(x)

inv_model = keras.Model(inputs=[inputs], outputs=[outputs], name="inv_model")

# Compile the mode with the necessary loss function and optimizer.
print("compiling the involution model...")
inv_model.compile(
    optimizer="adam",
    loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
    metrics=["accuracy"],
)

# train the model
print("inv model training...")
inv_hist = inv_model.fit(train_ds, epochs=20, validation_data=test_ds)
building the involution model...
compiling the involution model...
inv model training...
Epoch 1/20
196/196 [==============================] - 5s 21ms/step - loss: 2.1570 - accuracy: 0.2266 - val_loss: 2.2712 - val_accuracy: 0.1557
Epoch 2/20
196/196 [==============================] - 4s 20ms/step - loss: 1.9445 - accuracy: 0.3054 - val_loss: 1.9762 - val_accuracy: 0.2963
Epoch 3/20
196/196 [==============================] - 4s 20ms/step - loss: 1.8469 - accuracy: 0.3433 - val_loss: 1.8044 - val_accuracy: 0.3669
Epoch 4/20
196/196 [==============================] - 4s 20ms/step - loss: 1.7837 - accuracy: 0.3646 - val_loss: 1.7640 - val_accuracy: 0.3761
Epoch 5/20
196/196 [==============================] - 4s 20ms/step - loss: 1.7369 - accuracy: 0.3784 - val_loss: 1.7180 - val_accuracy: 0.3907
Epoch 6/20
196/196 [==============================] - 4s 19ms/step - loss: 1.7031 - accuracy: 0.3917 - val_loss: 1.6839 - val_accuracy: 0.4004
Epoch 7/20
196/196 [==============================] - 4s 19ms/step - loss: 1.6748 - accuracy: 0.3988 - val_loss: 1.6786 - val_accuracy: 0.4037
Epoch 8/20
196/196 [==============================] - 4s 19ms/step - loss: 1.6592 - accuracy: 0.4052 - val_loss: 1.6550 - val_accuracy: 0.4103
Epoch 9/20
196/196 [==============================] - 4s 19ms/step - loss: 1.6412 - accuracy: 0.4106 - val_loss: 1.6346 - val_accuracy: 0.4158
Epoch 10/20
196/196 [==============================] - 4s 19ms/step - loss: 1.6251 - accuracy: 0.4178 - val_loss: 1.6330 - val_accuracy: 0.4145
Epoch 11/20
196/196 [==============================] - 4s 19ms/step - loss: 1.6124 - accuracy: 0.4206 - val_loss: 1.6214 - val_accuracy: 0.4218
Epoch 12/20
196/196 [==============================] - 4s 19ms/step - loss: 1.5978 - accuracy: 0.4252 - val_loss: 1.6121 - val_accuracy: 0.4239
Epoch 13/20
196/196 [==============================] - 4s 19ms/step - loss: 1.5868 - accuracy: 0.4301 - val_loss: 1.5974 - val_accuracy: 0.4284
Epoch 14/20
196/196 [==============================] - 4s 19ms/step - loss: 1.5759 - accuracy: 0.4353 - val_loss: 1.5939 - val_accuracy: 0.4325
Epoch 15/20
196/196 [==============================] - 4s 19ms/step - loss: 1.5677 - accuracy: 0.4369 - val_loss: 1.5889 - val_accuracy: 0.4372
Epoch 16/20
196/196 [==============================] - 4s 20ms/step - loss: 1.5586 - accuracy: 0.4413 - val_loss: 1.5817 - val_accuracy: 0.4376
Epoch 17/20
196/196 [==============================] - 4s 20ms/step - loss: 1.5507 - accuracy: 0.4447 - val_loss: 1.5776 - val_accuracy: 0.4381
Epoch 18/20
196/196 [==============================] - 4s 20ms/step - loss: 1.5420 - accuracy: 0.4477 - val_loss: 1.5785 - val_accuracy: 0.4378
Epoch 19/20
196/196 [==============================] - 4s 20ms/step - loss: 1.5357 - accuracy: 0.4484 - val_loss: 1.5639 - val_accuracy: 0.4431
Epoch 20/20
196/196 [==============================] - 4s 20ms/step - loss: 1.5305 - accuracy: 0.4530 - val_loss: 1.5661 - val_accuracy: 0.4418
building the involution model...
compiling the involution model...
inv model training...
Epoch 1/20
196/196 [==============================] - 5s 18ms/step - loss: 2.3027 - accuracy: 0.0979 - val_loss: 2.3026 - val_accuracy: 0.1000
Epoch 2/20
196/196 [==============================] - 3s 17ms/step - loss: 2.3027 - accuracy: 0.0974 - val_loss: 2.3026 - val_accuracy: 0.1000
Epoch 3/20
196/196 [==============================] - 3s 17ms/step - loss: 2.3027 - accuracy: 0.0968 - val_loss: 2.3026 - val_accuracy: 0.1000
Epoch 4/20
196/196 [==============================] - 3s 17ms/step - loss: 2.3027 - accuracy: 0.0970 - val_loss: 2.3026 - val_accuracy: 0.1000
Epoch 5/20
196/196 [==============================] - 3s 17ms/step - loss: 2.1119 - accuracy: 0.2201 - val_loss: 2.0064 - val_accuracy: 0.2656
Epoch 6/20
196/196 [==============================] - 3s 16ms/step - loss: 1.8503 - accuracy: 0.3308 - val_loss: 1.8354 - val_accuracy: 0.3393
Epoch 7/20
196/196 [==============================] - 3s 17ms/step - loss: 1.7592 - accuracy: 0.3687 - val_loss: 1.7367 - val_accuracy: 0.3725
Epoch 8/20
196/196 [==============================] - 3s 16ms/step - loss: 1.7195 - accuracy: 0.3841 - val_loss: 1.7025 - val_accuracy: 0.3864
Epoch 9/20
196/196 [==============================] - 3s 16ms/step - loss: 1.6928 - accuracy: 0.3948 - val_loss: 1.6811 - val_accuracy: 0.3977
Epoch 10/20
196/196 [==============================] - 3s 16ms/step - loss: 1.6691 - accuracy: 0.4043 - val_loss: 1.6605 - val_accuracy: 0.4068
Epoch 11/20
196/196 [==============================] - 3s 15ms/step - loss: 1.6497 - accuracy: 0.4114 - val_loss: 1.6300 - val_accuracy: 0.4137
Epoch 12/20
196/196 [==============================] - 3s 15ms/step - loss: 1.6339 - accuracy: 0.4167 - val_loss: 1.6227 - val_accuracy: 0.4149
Epoch 13/20
196/196 [==============================] - 3s 16ms/step - loss: 1.6189 - accuracy: 0.4229 - val_loss: 1.6095 - val_accuracy: 0.4190
Epoch 14/20
196/196 [==============================] - 3s 15ms/step - loss: 1.6071 - accuracy: 0.4269 - val_loss: 1.5958 - val_accuracy: 0.4237
Epoch 15/20
196/196 [==============================] - 3s 16ms/step - loss: 1.5958 - accuracy: 0.4324 - val_loss: 1.5909 - val_accuracy: 0.4286
Epoch 16/20
196/196 [==============================] - 3s 16ms/step - loss: 1.5885 - accuracy: 0.4353 - val_loss: 1.5783 - val_accuracy: 0.4326
Epoch 17/20
196/196 [==============================] - 3s 16ms/step - loss: 1.5770 - accuracy: 0.4403 - val_loss: 1.5746 - val_accuracy: 0.4355
Epoch 18/20
196/196 [==============================] - 3s 15ms/step - loss: 1.5710 - accuracy: 0.4423 - val_loss: 1.5655 - val_accuracy: 0.4376
Epoch 19/20
196/196 [==============================] - 3s 15ms/step - loss: 1.5640 - accuracy: 0.4461 - val_loss: 1.5633 - val_accuracy: 0.4408
Epoch 20/20
196/196 [==============================] - 3s 15ms/step - loss: 1.5553 - accuracy: 0.4495 - val_loss: 1.5599 - val_accuracy: 0.4428
CPU times: user 1min 31s, sys: 5.88 s, total: 1min 36s
Wall time: 1min 27s

 

比較

このセクションでは、両方のモデルを見て幾つかのポイントを比較します。

 

パラメータ

類似のアーキテクチャでは、CNN のパラメータは INN (Involutional Neural Network) のそれよりも遥かに大きいことがわかります。

conv_model.summary()

inv_model.summary()
Model: "sequential_3"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_6 (Conv2D)            (None, 32, 32, 32)        896       
_________________________________________________________________
relu1 (ReLU)                 (None, 32, 32, 32)        0         
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 16, 16, 32)        0         
_________________________________________________________________
conv2d_7 (Conv2D)            (None, 16, 16, 64)        18496     
_________________________________________________________________
relu2 (ReLU)                 (None, 16, 16, 64)        0         
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 8, 8, 64)          0         
_________________________________________________________________
conv2d_8 (Conv2D)            (None, 8, 8, 64)          36928     
_________________________________________________________________
relu3 (ReLU)                 (None, 8, 8, 64)          0         
_________________________________________________________________
flatten (Flatten)            (None, 4096)              0         
_________________________________________________________________
dense (Dense)                (None, 64)                262208    
_________________________________________________________________
dense_1 (Dense)              (None, 10)                650       
=================================================================
Total params: 319,178
Trainable params: 319,178
Non-trainable params: 0
_________________________________________________________________
Model: "inv_model"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         [(None, 32, 32, 3)]       0         
_________________________________________________________________
inv_1 (Involution)           ((None, 32, 32, 3), (None 26        
_________________________________________________________________
re_lu_3 (ReLU)               (None, 32, 32, 3)         0         
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 16, 16, 3)         0         
_________________________________________________________________
inv_2 (Involution)           ((None, 16, 16, 3), (None 26        
_________________________________________________________________
re_lu_4 (ReLU)               (None, 16, 16, 3)         0         
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 8, 8, 3)           0         
_________________________________________________________________
inv_3 (Involution)           ((None, 8, 8, 3), (None,  26        
_________________________________________________________________
re_lu_5 (ReLU)               (None, 8, 8, 3)           0         
_________________________________________________________________
flatten_1 (Flatten)          (None, 192)               0         
_________________________________________________________________
dense_2 (Dense)              (None, 64)                12352     
_________________________________________________________________
dense_3 (Dense)              (None, 10)                650       
=================================================================
Total params: 13,080
Trainable params: 13,074
Non-trainable params: 6
_________________________________________________________________

 

損失と精度のプロット

ここで、損失と精度のプロットは INN が (少ないパラメータを使用する) スローな学習者であることを示しています。

plt.figure(figsize=(20, 5))

plt.subplot(1, 2, 1)
plt.title("Convolution Loss")
plt.plot(conv_hist.history["loss"], label="loss")
plt.plot(conv_hist.history["val_loss"], label="val_loss")
plt.legend()

plt.subplot(1, 2, 2)
plt.title("Involution Loss")
plt.plot(inv_hist.history["loss"], label="loss")
plt.plot(inv_hist.history["val_loss"], label="val_loss")
plt.legend()

plt.show()

plt.figure(figsize=(20, 5))

plt.subplot(1, 2, 1)
plt.title("Convolution Accuracy")
plt.plot(conv_hist.history["accuracy"], label="accuracy")
plt.plot(conv_hist.history["val_accuracy"], label="val_accuracy")
plt.legend()

plt.subplot(1, 2, 2)
plt.title("Involution Accuracy")
plt.plot(inv_hist.history["accuracy"], label="accuracy")
plt.plot(inv_hist.history["val_accuracy"], label="val_accuracy")
plt.legend()

plt.show()

(訳者注: 実験結果)

 

Involution カーネルの可視化

カーネルを可視化するため、各 involution カーネルから KxK 値の合計を取ります。異なる空間位置にある総ての標本値 (= representatives) が対応するヒートマップを構成します。

著者は以下のように述べています :

「私達の提案した involution は自己注意を連想させて本質的にはその汎用化バージョンになれるでしょう」

カーネルの可視化により画像の注意マップを実際に取得できます。学習された involution カーネルは入力テンソルの個々の空間的位置への注意を提供します。位置固有の (= location-specific) 特性は involution を自己注意が属するモデルの一般的な空間にします。

layer_names = ["inv_1", "inv_2", "inv_3"]
outputs = [inv_model.get_layer(name).output for name in layer_names]
vis_model = keras.Model(inv_model.input, outputs)

fig, axes = plt.subplots(nrows=10, ncols=4, figsize=(10, 30))

for ax, test_image in zip(axes, test_images[:10]):
    (inv1_out, inv2_out, inv3_out) = vis_model.predict(test_image[None, ...])

    _, inv1_kernel = inv1_out
    _, inv2_kernel = inv2_out
    _, inv3_kernel = inv3_out

    inv1_kernel = tf.reduce_sum(inv1_kernel, axis=[-1, -2, -3])
    inv2_kernel = tf.reduce_sum(inv2_kernel, axis=[-1, -2, -3])
    inv3_kernel = tf.reduce_sum(inv3_kernel, axis=[-1, -2, -3])

    ax[0].imshow(keras.preprocessing.image.array_to_img(test_image))
    ax[0].set_title("Input Image")

    ax[1].imshow(keras.preprocessing.image.array_to_img(inv1_kernel[0, ..., None]))
    ax[1].set_title("Involution Kernel 1")

    ax[2].imshow(keras.preprocessing.image.array_to_img(inv2_kernel[0, ..., None]))
    ax[2].set_title("Involution Kernel 2")

    ax[3].imshow(keras.preprocessing.image.array_to_img(inv3_kernel[0, ..., None]))
    ax[3].set_title("Involution Kernel 3")

(訳者注: 実験結果)

 

結論

このサンプルでは、主要なフォーカスは簡単に再利用できる Involution 層を構築することでした。私達の比較は特定のタスクに基づいていましたが、異なるタスクのためにこの層を自由に使用して結果を報告してください。

個人的意見では、 involution の重要なポイントは自己注意との関係性です。位置固有でチャネル固有な処理の背後にある直感は多くのタスクで意味があります。

更に進むためには以下を行なうことができます :

  • より良い理解のために involution の Yannick のビデオ を見てください。
  • involution 層の様々なハイパーパラメータで実験してください。
  • involution 層で様々なモデルを構築してください。
  • 全く異なるカーネル生成方法を構築してみてください。

 

APPENDIX

* 訳者注: INN を 100 エポックで実験

building the involution model...
compiling the involution model...
inv model training...
Epoch 1/100
196/196 [==============================] - 5s 17ms/step - loss: 2.2242 - accuracy: 0.1848 - val_loss: 2.2879 - val_accuracy: 0.1140
Epoch 2/100
196/196 [==============================] - 3s 15ms/step - loss: 1.9661 - accuracy: 0.3087 - val_loss: 1.9162 - val_accuracy: 0.3045
Epoch 3/100
196/196 [==============================] - 3s 16ms/step - loss: 1.8010 - accuracy: 0.3641 - val_loss: 1.7586 - val_accuracy: 0.3789
Epoch 4/100
196/196 [==============================] - 3s 15ms/step - loss: 1.7147 - accuracy: 0.3964 - val_loss: 1.6851 - val_accuracy: 0.4068
Epoch 5/100
196/196 [==============================] - 3s 15ms/step - loss: 1.6682 - accuracy: 0.4143 - val_loss: 1.6538 - val_accuracy: 0.4213
Epoch 6/100
196/196 [==============================] - 3s 16ms/step - loss: 1.6364 - accuracy: 0.4255 - val_loss: 1.6282 - val_accuracy: 0.4344
Epoch 7/100
196/196 [==============================] - 3s 15ms/step - loss: 1.6132 - accuracy: 0.4335 - val_loss: 1.6257 - val_accuracy: 0.4332
Epoch 8/100
196/196 [==============================] - 3s 15ms/step - loss: 1.5979 - accuracy: 0.4406 - val_loss: 1.5947 - val_accuracy: 0.4470
Epoch 9/100
196/196 [==============================] - 3s 15ms/step - loss: 1.5823 - accuracy: 0.4455 - val_loss: 1.5842 - val_accuracy: 0.4471
Epoch 10/100
196/196 [==============================] - 3s 15ms/step - loss: 1.5645 - accuracy: 0.4512 - val_loss: 1.5652 - val_accuracy: 0.4561
Epoch 11/100
196/196 [==============================] - 3s 16ms/step - loss: 1.5526 - accuracy: 0.4565 - val_loss: 1.5597 - val_accuracy: 0.4611
Epoch 12/100
196/196 [==============================] - 3s 16ms/step - loss: 1.5435 - accuracy: 0.4590 - val_loss: 1.5507 - val_accuracy: 0.4619
Epoch 13/100
196/196 [==============================] - 3s 15ms/step - loss: 1.5343 - accuracy: 0.4629 - val_loss: 1.5561 - val_accuracy: 0.4582
Epoch 14/100
196/196 [==============================] - 3s 15ms/step - loss: 1.5208 - accuracy: 0.4669 - val_loss: 1.5471 - val_accuracy: 0.4622
Epoch 15/100
196/196 [==============================] - 3s 15ms/step - loss: 1.5159 - accuracy: 0.4706 - val_loss: 1.5343 - val_accuracy: 0.4658
Epoch 16/100
196/196 [==============================] - 3s 15ms/step - loss: 1.5064 - accuracy: 0.4749 - val_loss: 1.5254 - val_accuracy: 0.4705
Epoch 17/100
196/196 [==============================] - 3s 15ms/step - loss: 1.4985 - accuracy: 0.4756 - val_loss: 1.5226 - val_accuracy: 0.4739
Epoch 18/100
196/196 [==============================] - 3s 14ms/step - loss: 1.4875 - accuracy: 0.4813 - val_loss: 1.5187 - val_accuracy: 0.4748
Epoch 19/100
196/196 [==============================] - 3s 15ms/step - loss: 1.4835 - accuracy: 0.4817 - val_loss: 1.5209 - val_accuracy: 0.4685
Epoch 20/100
196/196 [==============================] - 3s 15ms/step - loss: 1.4759 - accuracy: 0.4849 - val_loss: 1.5156 - val_accuracy: 0.4715
Epoch 21/100
196/196 [==============================] - 3s 16ms/step - loss: 1.4711 - accuracy: 0.4878 - val_loss: 1.5092 - val_accuracy: 0.4722
Epoch 22/100
196/196 [==============================] - 3s 15ms/step - loss: 1.4642 - accuracy: 0.4895 - val_loss: 1.4991 - val_accuracy: 0.4785
Epoch 23/100
196/196 [==============================] - 3s 15ms/step - loss: 1.4578 - accuracy: 0.4906 - val_loss: 1.4995 - val_accuracy: 0.4799
Epoch 24/100
196/196 [==============================] - 3s 15ms/step - loss: 1.4513 - accuracy: 0.4922 - val_loss: 1.4968 - val_accuracy: 0.4802
Epoch 25/100
196/196 [==============================] - 3s 16ms/step - loss: 1.4468 - accuracy: 0.4932 - val_loss: 1.4992 - val_accuracy: 0.4810
Epoch 26/100
196/196 [==============================] - 3s 15ms/step - loss: 1.4439 - accuracy: 0.4956 - val_loss: 1.4906 - val_accuracy: 0.4827
Epoch 27/100
196/196 [==============================] - 3s 15ms/step - loss: 1.4352 - accuracy: 0.4984 - val_loss: 1.4975 - val_accuracy: 0.4802
Epoch 28/100
196/196 [==============================] - 3s 15ms/step - loss: 1.4329 - accuracy: 0.4990 - val_loss: 1.4823 - val_accuracy: 0.4854
Epoch 29/100
196/196 [==============================] - 3s 15ms/step - loss: 1.4258 - accuracy: 0.5016 - val_loss: 1.4811 - val_accuracy: 0.4858
Epoch 30/100
196/196 [==============================] - 3s 16ms/step - loss: 1.4200 - accuracy: 0.5032 - val_loss: 1.4764 - val_accuracy: 0.4903
Epoch 31/100
196/196 [==============================] - 3s 16ms/step - loss: 1.4175 - accuracy: 0.5041 - val_loss: 1.4805 - val_accuracy: 0.4890
Epoch 32/100
196/196 [==============================] - 3s 16ms/step - loss: 1.4122 - accuracy: 0.5057 - val_loss: 1.4764 - val_accuracy: 0.4892
Epoch 33/100
196/196 [==============================] - 3s 16ms/step - loss: 1.4097 - accuracy: 0.5064 - val_loss: 1.4693 - val_accuracy: 0.4900
Epoch 34/100
196/196 [==============================] - 3s 15ms/step - loss: 1.4032 - accuracy: 0.5092 - val_loss: 1.4715 - val_accuracy: 0.4911
Epoch 35/100
196/196 [==============================] - 3s 15ms/step - loss: 1.3991 - accuracy: 0.5112 - val_loss: 1.4799 - val_accuracy: 0.4895
Epoch 36/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3970 - accuracy: 0.5123 - val_loss: 1.4780 - val_accuracy: 0.4884
Epoch 37/100
196/196 [==============================] - 3s 15ms/step - loss: 1.3909 - accuracy: 0.5130 - val_loss: 1.4647 - val_accuracy: 0.4932
Epoch 38/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3864 - accuracy: 0.5150 - val_loss: 1.4624 - val_accuracy: 0.4936
Epoch 39/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3840 - accuracy: 0.5160 - val_loss: 1.4643 - val_accuracy: 0.4917
Epoch 40/100
196/196 [==============================] - 3s 15ms/step - loss: 1.3817 - accuracy: 0.5165 - val_loss: 1.4647 - val_accuracy: 0.4931
Epoch 41/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3775 - accuracy: 0.5177 - val_loss: 1.4648 - val_accuracy: 0.4920
Epoch 42/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3741 - accuracy: 0.5194 - val_loss: 1.4643 - val_accuracy: 0.4941
Epoch 43/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3694 - accuracy: 0.5224 - val_loss: 1.4579 - val_accuracy: 0.4966
Epoch 44/100
196/196 [==============================] - 3s 15ms/step - loss: 1.3679 - accuracy: 0.5216 - val_loss: 1.4576 - val_accuracy: 0.4967
Epoch 45/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3626 - accuracy: 0.5240 - val_loss: 1.4552 - val_accuracy: 0.4970
Epoch 46/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3589 - accuracy: 0.5241 - val_loss: 1.4568 - val_accuracy: 0.4985
Epoch 47/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3592 - accuracy: 0.5227 - val_loss: 1.4571 - val_accuracy: 0.4983
Epoch 48/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3561 - accuracy: 0.5260 - val_loss: 1.4570 - val_accuracy: 0.4953
Epoch 49/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3528 - accuracy: 0.5264 - val_loss: 1.4567 - val_accuracy: 0.4974
Epoch 50/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3487 - accuracy: 0.5267 - val_loss: 1.4595 - val_accuracy: 0.4951
Epoch 51/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3470 - accuracy: 0.5280 - val_loss: 1.4539 - val_accuracy: 0.4994
Epoch 52/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3448 - accuracy: 0.5296 - val_loss: 1.4537 - val_accuracy: 0.4984
Epoch 53/100
196/196 [==============================] - 3s 15ms/step - loss: 1.3410 - accuracy: 0.5321 - val_loss: 1.4592 - val_accuracy: 0.4953
Epoch 54/100
196/196 [==============================] - 3s 15ms/step - loss: 1.3384 - accuracy: 0.5315 - val_loss: 1.4462 - val_accuracy: 0.4995
Epoch 55/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3390 - accuracy: 0.5320 - val_loss: 1.4493 - val_accuracy: 0.5008
Epoch 56/100
196/196 [==============================] - 3s 15ms/step - loss: 1.3346 - accuracy: 0.5325 - val_loss: 1.4503 - val_accuracy: 0.4977
Epoch 57/100
196/196 [==============================] - 3s 15ms/step - loss: 1.3321 - accuracy: 0.5333 - val_loss: 1.4476 - val_accuracy: 0.5004
Epoch 58/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3309 - accuracy: 0.5340 - val_loss: 1.4490 - val_accuracy: 0.4980
Epoch 59/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3295 - accuracy: 0.5355 - val_loss: 1.4587 - val_accuracy: 0.4960
Epoch 60/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3291 - accuracy: 0.5347 - val_loss: 1.4535 - val_accuracy: 0.4990
Epoch 61/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3246 - accuracy: 0.5367 - val_loss: 1.4501 - val_accuracy: 0.4985
Epoch 62/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3226 - accuracy: 0.5373 - val_loss: 1.4597 - val_accuracy: 0.4974
Epoch 63/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3192 - accuracy: 0.5384 - val_loss: 1.4473 - val_accuracy: 0.5000
Epoch 64/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3181 - accuracy: 0.5386 - val_loss: 1.4532 - val_accuracy: 0.5002
Epoch 65/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3152 - accuracy: 0.5397 - val_loss: 1.4528 - val_accuracy: 0.5006
Epoch 66/100
196/196 [==============================] - 3s 15ms/step - loss: 1.3138 - accuracy: 0.5405 - val_loss: 1.4455 - val_accuracy: 0.5025
Epoch 67/100
196/196 [==============================] - 3s 15ms/step - loss: 1.3147 - accuracy: 0.5393 - val_loss: 1.4535 - val_accuracy: 0.5014
Epoch 68/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3118 - accuracy: 0.5403 - val_loss: 1.4529 - val_accuracy: 0.5012
Epoch 69/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3075 - accuracy: 0.5432 - val_loss: 1.4508 - val_accuracy: 0.5009
Epoch 70/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3070 - accuracy: 0.5433 - val_loss: 1.4551 - val_accuracy: 0.5004
Epoch 71/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3078 - accuracy: 0.5421 - val_loss: 1.4562 - val_accuracy: 0.5001
Epoch 72/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3033 - accuracy: 0.5450 - val_loss: 1.4516 - val_accuracy: 0.5003
Epoch 73/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3037 - accuracy: 0.5446 - val_loss: 1.4444 - val_accuracy: 0.5012
Epoch 74/100
196/196 [==============================] - 3s 16ms/step - loss: 1.3019 - accuracy: 0.5443 - val_loss: 1.4541 - val_accuracy: 0.5015
Epoch 75/100
196/196 [==============================] - 3s 15ms/step - loss: 1.3009 - accuracy: 0.5451 - val_loss: 1.4472 - val_accuracy: 0.5003
Epoch 76/100
196/196 [==============================] - 3s 16ms/step - loss: 1.2965 - accuracy: 0.5460 - val_loss: 1.4530 - val_accuracy: 0.5008
Epoch 77/100
196/196 [==============================] - 3s 16ms/step - loss: 1.2967 - accuracy: 0.5448 - val_loss: 1.4499 - val_accuracy: 0.5015
Epoch 78/100
196/196 [==============================] - 3s 16ms/step - loss: 1.2932 - accuracy: 0.5475 - val_loss: 1.4649 - val_accuracy: 0.4993
Epoch 79/100
196/196 [==============================] - 3s 16ms/step - loss: 1.2961 - accuracy: 0.5468 - val_loss: 1.4531 - val_accuracy: 0.4997
Epoch 80/100
196/196 [==============================] - 3s 16ms/step - loss: 1.2924 - accuracy: 0.5479 - val_loss: 1.4581 - val_accuracy: 0.5006
Epoch 81/100
196/196 [==============================] - 3s 16ms/step - loss: 1.2937 - accuracy: 0.5482 - val_loss: 1.4567 - val_accuracy: 0.5006
Epoch 82/100
196/196 [==============================] - 3s 16ms/step - loss: 1.2909 - accuracy: 0.5485 - val_loss: 1.4530 - val_accuracy: 0.5001
Epoch 83/100
196/196 [==============================] - 3s 16ms/step - loss: 1.2882 - accuracy: 0.5502 - val_loss: 1.4573 - val_accuracy: 0.5010
Epoch 84/100
196/196 [==============================] - 3s 16ms/step - loss: 1.2902 - accuracy: 0.5492 - val_loss: 1.4516 - val_accuracy: 0.5008
Epoch 85/100
196/196 [==============================] - 3s 16ms/step - loss: 1.2847 - accuracy: 0.5518 - val_loss: 1.4478 - val_accuracy: 0.5011
Epoch 86/100
196/196 [==============================] - 3s 15ms/step - loss: 1.2859 - accuracy: 0.5500 - val_loss: 1.4567 - val_accuracy: 0.5001
Epoch 87/100
196/196 [==============================] - 3s 16ms/step - loss: 1.2845 - accuracy: 0.5516 - val_loss: 1.4565 - val_accuracy: 0.5007
Epoch 88/100
196/196 [==============================] - 3s 16ms/step - loss: 1.2828 - accuracy: 0.5523 - val_loss: 1.4477 - val_accuracy: 0.5007
Epoch 89/100
196/196 [==============================] - 3s 15ms/step - loss: 1.2827 - accuracy: 0.5510 - val_loss: 1.4479 - val_accuracy: 0.5018
Epoch 90/100
196/196 [==============================] - 3s 16ms/step - loss: 1.2788 - accuracy: 0.5535 - val_loss: 1.4553 - val_accuracy: 0.5016
Epoch 91/100
196/196 [==============================] - 3s 16ms/step - loss: 1.2804 - accuracy: 0.5526 - val_loss: 1.4553 - val_accuracy: 0.5024
Epoch 92/100
196/196 [==============================] - 3s 15ms/step - loss: 1.2782 - accuracy: 0.5538 - val_loss: 1.4534 - val_accuracy: 0.5018
Epoch 93/100
196/196 [==============================] - 3s 15ms/step - loss: 1.2794 - accuracy: 0.5539 - val_loss: 1.4530 - val_accuracy: 0.5017
Epoch 94/100
196/196 [==============================] - 3s 16ms/step - loss: 1.2767 - accuracy: 0.5537 - val_loss: 1.4542 - val_accuracy: 0.5018
Epoch 95/100
196/196 [==============================] - 3s 15ms/step - loss: 1.2761 - accuracy: 0.5552 - val_loss: 1.4500 - val_accuracy: 0.5025
Epoch 96/100
196/196 [==============================] - 3s 16ms/step - loss: 1.2740 - accuracy: 0.5539 - val_loss: 1.4515 - val_accuracy: 0.5024
Epoch 97/100
196/196 [==============================] - 3s 15ms/step - loss: 1.2726 - accuracy: 0.5561 - val_loss: 1.4515 - val_accuracy: 0.5017
Epoch 98/100
196/196 [==============================] - 3s 16ms/step - loss: 1.2725 - accuracy: 0.5540 - val_loss: 1.4488 - val_accuracy: 0.5027
Epoch 99/100
196/196 [==============================] - 3s 16ms/step - loss: 1.2705 - accuracy: 0.5570 - val_loss: 1.4541 - val_accuracy: 0.5042
Epoch 100/100
196/196 [==============================] - 3s 15ms/step - loss: 1.2692 - accuracy: 0.5566 - val_loss: 1.4463 - val_accuracy: 0.5048
CPU times: user 7min 13s, sys: 28.9 s, total: 7min 42s
Wall time: 7min 9s

 

以上



クラスキャット

最近の投稿

  • LangGraph 0.5 : エージェント開発 : エージェント・アーキテクチャ
  • LangGraph 0.5 : エージェント開発 : ワークフローとエージェント
  • LangGraph 0.5 : エージェント開発 : エージェントの実行
  • LangGraph 0.5 : エージェント開発 : prebuilt コンポーネントを使用したエージェント開発
  • LangGraph 0.5 : Get started : ローカルサーバの実行

タグ

AutoGen (13) ClassCat Press Release (20) ClassCat TF/ONNX Hub (11) DGL 0.5 (14) Eager Execution (7) Edward (17) FLUX.1 (16) Gemini (20) HuggingFace Transformers 4.5 (10) HuggingFace Transformers 4.6 (7) HuggingFace Transformers 4.29 (9) Keras 2 Examples (98) Keras 2 Guide (16) Keras 3 (10) Keras Release Note (17) Kubeflow 1.0 (10) LangChain (45) LangGraph (24) LangGraph 0.5 (9) MediaPipe 0.8 (11) Model Context Protocol (16) NNI 1.5 (16) OpenAI Agents SDK (8) OpenAI Cookbook (13) OpenAI platform (10) OpenAI platform 1.x (10) OpenAI ヘルプ (8) TensorFlow 2.0 Advanced Tutorials (33) TensorFlow 2.0 Advanced Tutorials (Alpha) (15) TensorFlow 2.0 Advanced Tutorials (Beta) (16) TensorFlow 2.0 Guide (10) TensorFlow 2.0 Guide (Alpha) (16) TensorFlow 2.0 Guide (Beta) (9) TensorFlow 2.0 Release Note (12) TensorFlow 2.0 Tutorials (20) TensorFlow 2.0 Tutorials (Alpha) (14) TensorFlow 2.0 Tutorials (Beta) (12) TensorFlow 2.4 Guide (24) TensorFlow Deploy (8) TensorFlow Get Started (7) TensorFlow Probability (9) TensorFlow Programmer's Guide (22) TensorFlow Release Note (18) TensorFlow Tutorials (33) TF-Agents 0.4 (11)
2021年11月
月 火 水 木 金 土 日
1234567
891011121314
15161718192021
22232425262728
2930  
« 10月   12月 »
© 2025 ClasCat® AI Research | Powered by Minimalist Blog WordPress Theme