首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确叠加capsnet (胶囊神经网络)?

如何正确叠加capsnet (胶囊神经网络)?
EN

Stack Overflow用户
提问于 2022-12-02 00:45:16
回答 1查看 62关注 0票数 -2

胶囊神经网络采用卷积、原胶囊和数字胶囊层。同时,采用卷积和最大池层的卷积神经网络。我想对卷积神经网络和胶囊神经网络进行比较。下面的表格是我的cnn模型的架构。我需要在胶囊神经网络上做一个类似的结构。那么,如何正确地叠加胶囊神经网络,堆栈胶囊神经网络是什么样的呢?

EN

回答 1

Stack Overflow用户

发布于 2022-12-02 02:43:15

从您的问题中,我了解到您需要创建比较输入和分段的网络。有一些技术可以通过自动编码器来创建对象分割,请参阅按颜色阴影和背景划分的示例图像,您可以确定初始的图像组件。

对于分割部分,您可以应用网络或对象分割,其中可以将其合并回带有标签和处理的图片,以便进行图像识别或其他任务。在这个例子中,仅仅是用区域和阴影掩蔽。

示例:我的简单实现并不比多头输入网络更难分类任务,阴影图像和区域是一个标签可以显着。

代码语言:javascript
复制
import os
from os.path import exists

import tensorflow as tf
import tensorflow_io as tfio

import matplotlib.pyplot as plt

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
: Variables
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
IMG_SHAPE = ( 32, 32, 1 ) 
tsk1_CLASSES_NUM = 2
initial_epochs = 5

PATH = os.path.join('F:\\datasets\\downloads\\Actors_jpg\\train\\Pikaploy', '*.jpg')
PATH_2 = os.path.join('F:\\datasets\\downloads\\Actors_jpg\\train\\Candidt Kibt', '*.jpg')
files = tf.data.Dataset.list_files(PATH)
files_2 = tf.data.Dataset.list_files(PATH_2)

list_file = []
list_file_actual = []
list_label = []
list_label_actual = [ 'Pikaploy', 'Pikaploy', 'Pikaploy', 'Pikaploy', 'Pikaploy', 'Candidt Kibt', 'Candidt Kibt', 'Candidt Kibt', 'Candidt Kibt', 'Candidt Kibt' ]
for file in files.take(5):
    image = tf.io.read_file( file )
    image =  tf.io.decode_jpeg( image, channels=0, ratio=1, fancy_upscaling=True, try_recover_truncated=False, acceptable_fraction=1, dct_method='INTEGER_FAST', name="decode_jpeg" )
    
    list_file_actual.append(image)
    image = tf.image.resize(image, [32,32], method='nearest')
    
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""
    : Image Masking
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""
    n_horizon = 64
    n_features = 16
    masking_layer = tf.keras.layers.Masking(mask_value=50, input_shape=(n_horizon, n_features))
    image = tf.constant( masking_layer(image)[:,:,0], shape=(32, 32, 1) )
    
    list_file.append(image)
    
    temp = tf.ones([ 20, 20 ]).numpy() * 0
    list_label.append( temp )
    
for file in files_2.take(5):
    image = tf.io.read_file( file )
    image =  tf.io.decode_jpeg( image, channels=0, ratio=1, fancy_upscaling=True, try_recover_truncated=False, acceptable_fraction=1, dct_method='INTEGER_FAST', name="decode_jpeg" )
    
    list_file_actual.append(image)
    image = tf.image.resize(image, [32,32], method='nearest')
    
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""
    : Image Masking
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""
    n_horizon = 64
    n_features = 16
    masking_layer = tf.keras.layers.Masking(mask_value=50, input_shape=(n_horizon, n_features))
    image = tf.constant( masking_layer(image)[:,:,0], shape=(32, 32, 1) )
    
    list_file.append(image)
    temp = tf.ones([ 20, 20 ]).numpy() * 9
    list_label.append( temp )
    
checkpoint_path = "F:\\models\\checkpoint\\" + os.path.basename(__file__).split('.')[0] + "\\TF_DataSets_01.h5"
checkpoint_dir = os.path.dirname(checkpoint_path)

if not exists(checkpoint_dir) : 
    os.mkdir(checkpoint_dir)
    print("Create directory: " + checkpoint_dir)
    
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
: Definition / Class
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
def  build_model():

    branch_A_input = tf.keras.Input(shape=IMG_SHAPE)
    branch_A_rescale = tf.keras.layers.experimental.preprocessing.Rescaling(1./127.5, offset= -1)(branch_A_input)
    branch_A = tf.keras.layers.Dropout(0.3)(branch_A_rescale)
    branch_A = tf.keras.layers.Conv2D(filters = 128, kernel_size = 13, activation= 'swish', name = "base_conv_A")(branch_A)
    branch_A = tf.keras.layers.BatchNormalization(name = "base_batch_normalization_A")(branch_A)
    branch_A = tf.keras.Model(inputs=branch_A_input, outputs = branch_A)


    branch_B_input = tf.keras.Input(shape=IMG_SHAPE)
    branch_B_rescale = tf.keras.layers.experimental.preprocessing.Rescaling(1./127.5, offset= -1)(branch_B_input)
    branch_B = tf.keras.layers.Dropout(0.3)(branch_B_rescale)
    branch_B = tf.keras.layers.Conv2D(filters = 128, kernel_size = 13, activation= 'swish', name = "base_conv_B")(branch_B)
    branch_B = tf.keras.layers.BatchNormalization(name = "base_batch_normalization_B")(branch_B)
    branch_B = tf.keras.Model(inputs=branch_B_input, outputs = branch_B)

    merge = tf.keras.layers.Concatenate()([branch_A.output, branch_B.output])

    output_A = tf.keras.layers.Dense(tsk1_CLASSES_NUM, activation='softmax', name='4cls')(merge)
    output_B = tf.keras.layers.Dense(1, name='2cls')(merge)

    model = tf.keras.Model(inputs = [branch_A.input, branch_B.input] , outputs = [output_A, output_B], name="multi_task_model")

    optimizer = tf.keras.optimizers.get('adam')
    optimizer.learning_rate = 0.001
    losses = {'4cls': tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
    '2cls': tf.keras.losses.BinaryCrossentropy(from_logits=True)}

    mtrcs = {
        "4cls": 'accuracy',
        "2cls": 'accuracy',
    }
    model.compile(optimizer=optimizer, loss= losses, metrics=mtrcs)

    return model
    
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
: DataSet / Input
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
list_label = tf.constant( list_label, shape=( 10, 20, 20, 1 ) )
list_file = tf.constant( tf.cast( list_file, dtype=tf.int64), shape=( 10, 32, 32, 1 ) )

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
: Task
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
model = build_model()
history = model.fit( [list_file, list_file], list_label, epochs=initial_epochs)

input( '...' )

数据准备:图像掩蔽背景

输出:

代码语言:javascript
复制
2022-12-02 09:39:30.019022: I tensorflow/stream_executor/cuda/cuda_dnn.cc:368] Loaded cuDNN version 8100
1/1 [==============================] - ETA: 0s - loss: nan - 4cls_loss: nan - 2cls_loss: 0.7376 - 4cls_accuracy: 0.2632 1/1 [==============================] - 2s 2s/step - loss: nan - 4cls_loss: nan - 2cls_loss: 0.7376 - 4cls_accuracy: 0.2632 - 2cls_accuracy: 0.3570
Epoch 2/5
1/1 [==============================] - ETA: 0s - loss: nan - 4cls_loss: nan - 2cls_loss: nan - 4cls_accuracy: 0.5000 - 21/1 [==============================] - 0s 11ms/step - loss: nan - 4cls_loss: nan - 2cls_loss: nan - 4cls_accuracy: 0.5000 - 2cls_accuracy: 0.5000
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74649733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档