tensorflow实现VGG16以及tensorboard可视化参数调整

众所周知,VGG16为深度学习在计算机视觉一个典型卷积神经网络算法。它是由卷积层的堆叠组合而成的。tensorflow是谷歌开源的深度学习的框架,而tensorboard为深度学习的可视化工具。我们通过tensorboard可视化可以很好的判断深度学习的结构以及训练过程的参数。接下来,我们就简单的介绍下使用tensorflow训练VGG16以及用tensorboard来可视化训练过程和图结构。本文使用的数据集为mnist手写数字。

首先我们来看看tensorboard中GRAPH模块来查看VGG16的图结构


GRAPHS面板是对理解神经网络结构最有帮助的一个面板,它直观地展示了数据流图。通过这个模块,我们可以很快的确认我们构建的深度学习结构是否与我们所想的一样,可以可视化对其中进行调整结构。在GRAPHS面板的左侧,可以选择迭代的步骤。可以用不同的Color(颜色)来表示不同的Structure(整个数据流的结构),或者用不同Color来表示不同的Device(设备)。例如当使用了多个GPU时,各个节点分别使用的GPU不同。当我们选择特定的某次迭代时,可以显示出各个节点的compute time(计算时间)以及memory(内存消耗),如上图。

其次我们来看看scaras模块,这个模块可以可视化模型训练的过程中,具体如下:

SCALARS 面板的左边是一些选项,包括 Split on undercores(用下划线分开显示)、 Data downloadlinks(数据下载链接)、 Smoothing(图像的曲线平滑程度)以及 Horizontal Axis(水平轴)的表示,其中水平轴的表示分3种(STEP代表迭代次数,RELATIVE代表按照训练集和测试集的相对值,WALL代表按照时间)。在这里,我只表示了accuracy以及loss的model evaluation,读者可以根据自己选择的model evaluation选择也可以表示每一层权重的最大值、最小值、平均值等信息。

最后介绍一下image

上图展示了训练数据集和测试数据集经过预处理后图片的样子。

接下来给出上面实现的代码:

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
import numpy as np
import time

#paras
n_classes = 10
# Training Parameters
learning_rate = 0.001
num_steps = 200
batch_size = 128
display_step = 10

X = tf.placeholder(tf.float32,[None,28*28])
y = tf.placeholder(tf.float32,[None,n_classes])

#build vgg16 model
x = tf.reshape(X,[-1,28,28,1])
tf.summary.image('x',x)
#conv_1
with tf.name_scope('conv1_1') as scope:
    kernel = tf.Variable(tf.truncated_normal([3,3,1,16],dtype=tf.float32,stddev=1e-1),name='weights')
    conv = tf.nn.conv2d(x,kernel,[1,1,1,1],padding='SAME')
    biases = tf.Variable(tf.constant(0.0,shape=[16],dtype=tf.float32),trainable=True,name='biases')
    out = tf.nn.bias_add(conv,biases)
    conv1_1 = tf.nn.relu(out, name='scope')
with tf.name_scope('conv1_2') as scope:
    kernel = tf.Variable(tf.truncated_normal([3,3,16,16],dtype=tf.float32,stddev=1e-1),name='weights')
    conv = tf.nn.conv2d(conv1_1,kernel,[1,1,1,1],padding='SAME')
    biases = tf.Variable(tf.constant(0.0,shape=[16],dtype=tf.float32),trainable=True,name='biases')
    out = tf.nn.bias_add(conv,biases)
    conv1_2 = tf.nn.relu(out,name='scope')
#pool1
pool_1 = tf.nn.max_pool(conv1_2,ksize=[1,2,2,1],strides=[1,2,2,
  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是使用TensorFlow实现VGG16的代码示例: ```python import tensorflow as tf def vgg16(input): # 定义卷积层函数 def conv_layer(input, filters, kernel_size, strides, padding): return tf.layers.conv2d(inputs=input, filters=filters, kernel_size=kernel_size, strides=strides, padding=padding, activation=tf.nn.relu) # 定义池化层函数 def pool_layer(input): return tf.layers.max_pooling2d(inputs=input, pool_size=2, strides=2) # 定义VGG16网络结构 conv1_1 = conv_layer(input, 64, 3, 1, 'same') conv1_2 = conv_layer(conv1_1, 64, 3, 1, 'same') pool1 = pool_layer(conv1_2) conv2_1 = conv_layer(pool1, 128, 3, 1, 'same') conv2_2 = conv_layer(conv2_1, 128, 3, 1, 'same') pool2 = pool_layer(conv2_2) conv3_1 = conv_layer(pool2, 256, 3, 1, 'same') conv3_2 = conv_layer(conv3_1, 256, 3, 1, 'same') conv3_3 = conv_layer(conv3_2, 256, 3, 1, 'same') pool3 = pool_layer(conv3_3) conv4_1 = conv_layer(pool3, 512, 3, 1, 'same') conv4_2 = conv_layer(conv4_1, 512, 3, 1, 'same') conv4_3 = conv_layer(conv4_2, 512, 3, 1, 'same') pool4 = pool_layer(conv4_3) conv5_1 = conv_layer(pool4, 512, 3, 1, 'same') conv5_2 = conv_layer(conv5_1, 512, 3, 1, 'same') conv5_3 = conv_layer(conv5_2, 512, 3, 1, 'same') pool5 = pool_layer(conv5_3) # 将池化层输出的特征图展开成一维向量 flatten = tf.layers.flatten(pool5) # 定义全连接层 fc6 = tf.layers.dense(inputs=flatten, units=4096, activation=tf.nn.relu) fc7 = tf.layers.dense(inputs=fc6, units=4096, activation=tf.nn.relu) fc8 = tf.layers.dense(inputs=fc7, units=1000, activation=None) return fc8 ``` 在上述代码中,我们首先定义了`conv_layer`和`pool_layer`函数来创建卷积层和池化层。然后,我们按照VGG16的网络结构定义了卷积层、池化层和全连接层,并将它们连接在一起形成完整的VGG16网络。最后,我们返回最后一个全连接层的输出。 注意,这里的代码只是一个简单的实现示例,具体实现可能会根据实际需求进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值