Как сделать визуализацию графика в Tensorflow v2 с помощью Tensorboard? - PullRequest
0 голосов
/ 22 сентября 2019

На самом деле у меня есть две проблемы.Прежде всего, возможно ли использовать визуализацию графика в Tfv2?Потому что я не мог написать код, показывающий мою архитектуру, поэтому я не знал, что мой дизайн правильный.

Вторая проблема - моя сеть прошла обучение, и точность валидации составляет всего 50%.Я использовал архитектуру ResNet.Вот мой блок ResNet, и я использовал его в структуре основной сети 6 раз.Мой GPU не самый лучший, поэтому я должен использовать фильтр размером 16 или 32:

class ResnetBlock(tf.keras.Model):

def __init__(self, residual_path=False):
    super(ResnetBlock, self).__init__()

    self.residual_path = residual_path

    self.conv2 = tf.keras.layers.Conv2D(16, kernel_size = (3,3), strides=(1,1), padding='same', use_bias=False, kernel_initializer=tf.keras.initializers.he_normal(seed=13))
    self.bn2 = tf.keras.layers.BatchNormalization(epsilon=1e-3, momentum=0.993)
    self.relu2 = tf.keras.layers.Activation('relu')

    self.conv3 = tf.keras.layers.Conv2D(32, kernel_size = (3,3), strides=(1,1), padding='same', use_bias=False, kernel_initializer=tf.keras.initializers.he_normal(seed=13))
    self.bn3 = tf.keras.layers.BatchNormalization(epsilon=1e-3, momentum=0.993)
    self.relu3 = tf.keras.layers.Activation('relu')



def call(self, inputs, training=None):

    x0 = inputs

    x = self.conv2(inputs)
    x = self.bn2(x, training=training)
    x = self.relu2(x)

    x = self.conv3(x)
    x = self.bn3(x, training=training)
    x = self.relu3(x)        



    x = x + x0    

    return x

Также вот основная структура сети:

класс ResNet (tf.keras.Model):

def __init__(self, num_blocks ,num_classes, **kwargs):
    super(ResNet, self).__init__(**kwargs)

    self.num_blocks = num_blocks

    self.conv1 = tf.keras.layers.Conv2D(32, kernel_size = (7,7), strides=(2,2), padding='same', use_bias=False, kernel_initializer=tf.keras.initializers.he_normal(seed=13))
    self.bn1 = tf.keras.layers.BatchNormalization(epsilon=1e-3, momentum=0.993)
    self.relu1 = tf.keras.layers.Activation('relu')
    self.mps1 = tf.keras.layers.MaxPooling2D(pool_size=(2, 2))


    self.blocks = tf.keras.models.Sequential(name='dynamic-blocks')


    for block_number in range(num_blocks):
        block = ResnetBlock(residual_path=True)        
        self.blocks.add(block)


    self.final_bn = tf.keras.layers.BatchNormalization()
    self.avg_pool = tf.keras.layers.GlobalAveragePooling2D()
    self.fc = tf.keras.layers.Dense(num_classes)

def call(self, inputs, training=None):

    x = self.conv1(inputs)
    x = self.bn1(x, training=training)
    x = self.relu1(x) 
    x = self.mps1(x)

    out = self.blocks(x, training=training)



    out = self.final_bn(out, training=training)
    out = tf.nn.relu(out)

    out = self.avg_pool(out)
    out = self.fc(out)


    return out

1 Ответ

0 голосов
/ 23 сентября 2019

Для визуализации графика проще всего позвонить:

net = ResNet(num_blocks, num_classes)
net.compile(...)
net.summary(...)

Вы можете посмотреть в документации для аргументов.

Вы также можете проверитьkeras.utils.plot_model function (Я не знаю, хорошо ли она работает с TF-сетями.

Наконец, вы подходите своей модели для 1 эпохи 1 шага, добавляя обратный вызов TensorBoard. Затем, используя TensorBoard , вы можете получить очень детальное графическое представление вашей модели.

Добрый день, Алексис.

PS: Я не совсем понимаю вашуВторая проблема. Извините.

...