东方耀AI技术分享
标题: 02、VGG16预训练好的参数加载与模型网络构建_笔记 [打印本页]
作者: 东方耀 时间: 2019-3-12 16:44
标题: 02、VGG16预训练好的参数加载与模型网络构建_笔记
02、VGG16预训练好的参数加载与模型网络构建_笔记
vgg16与vgg19预训练好的参数文件下载【回复本帖可见】:
- # -*- coding: utf-8 -*-
- __author__ = 'dongfangyao'
- __date__ = '2019/3/12 下午5:19'
- __product__ = 'PyCharm'
- __filename__ = '1_vgg16_content'
- import numpy as np
- vgg16_data = np.load('vgg16.npy', encoding='latin1')
- print(type(vgg16_data))
- data_dict = vgg16_data.item()
- print(type(data_dict))
- print(data_dict.keys())
- print(len(data_dict))
- conv1_1 = data_dict['conv1_1']
- print(len(conv1_1))
- w, b = conv1_1
- print(w.shape)
- print(b.shape)
- conv3_1 = data_dict['conv3_1']
- print(len(conv3_1))
- w, b = conv3_1
- print(w.shape)
- print(b.shape)
- fc6 = data_dict['fc6']
- w, b = fc6
- print(w.shape)
- print(b.shape)
- fc8 = data_dict['fc8']
- w, b = fc8
- print(w.shape)
- print(b.shape)
复制代码
- # -*- coding: utf-8 -*-
- __author__ = 'dongfangyao'
- __date__ = '2019/3/12 下午5:33'
- __product__ = 'PyCharm'
- __filename__ = '2_image_style_con'
- import tensorflow as tf
- from tensorflow import logging
- import os
- import time
- import numpy as np
- logging.set_verbosity(logging.INFO)
- # logging.info('dfy_88888')
- # vgg net 中写死的 归一化的数据预处理
- VGG_MEAN = [103.939, 116.779, 123.68]
- class VGGNet:
- """
- 构建VGG16的网络结构 并从预训练好的模型提取参数 加载
- """
- def __init__(self, data_dict):
- self.data_dict = data_dict
- def get_conv_kernel(self, name):
- # 卷积核的参数:w 0 b 1
- return tf.constant(self.data_dict[name][0], name='conv')
- def get_fc_weight(self, name):
- return tf.constant(self.data_dict[name][0], name='fc')
- def get_bias(self, name):
- return tf.constant(self.data_dict[name][1], name='bias')
- def conv_layer(self, inputs, name):
- """
- 构建一个卷积计算层
- :param inputs: 输入的feature_map
- :param name: 卷积层的名字 也是获得参数的key 不能出错
- :return:
- """
- with tf.name_scope(name):
- """
- 多使用name_scope的好处:1、防止参数命名冲突 2、tensorboard可视化时很规整
- 如果scope里面有变量需要训练时则用tf.variable_scope
- """
- conv_w = self.get_conv_kernel(name)
- conv_b = self.get_bias(name)
- # tf.layers.conv2d() 这是一个封装更高级的api
- # 里面并没有提供接口来输入卷积核参数 这里不能用 平时训练cnn网络时非常好用
- result = tf.nn.conv2d(input=inputs, filter=conv_w, strides=[1, 1, 1, 1], padding='SAME', name=name)
- result = tf.nn.bias_add(result, conv_b)
- result = tf.nn.relu(result)
- return result
- def pooling_layer(self, inputs, name):
- # tf.layers.max_pooling2d()
- # tf.nn.max_pool 这里的池化层没有参数 两套api都可以用
- return tf.nn.max_pool(inputs, [1, 2, 2, 1], [1, 2, 2, 1], padding='SAME', name=name)
- def fc_layer(self, inputs, name, activation=tf.nn.relu):
- """
- 构建全连接层
- :param inputs: 输入
- :param name:
- :param activation: 是否有激活函数的封装
- :return:
- """
- with tf.name_scope(name):
- fc_w = self.get_fc_weight(name)
- fc_b = self.get_bias(name)
- # fc: wx+b 线性变换
- result = tf.nn.bias_add(tf.matmul(inputs, fc_w), fc_b)
- if activation is None:
- # vgg16的最后是不需relu激活的
- return result
- else:
- return activation(result)
- def flatten_op(self, inputs, name):
- # 展平操作 为了后续的fc层必须将维度展平
- with tf.name_scope(name):
- # [NHWC]---> [N, H*W*C]
- x_shape = inputs.get_shape().as_list()
- dim = 1
- for d in x_shape[1:]:
- dim *= d
- inputs = tf.reshape(inputs, shape=[-1, dim])
- # 直接用现成api也是可以的
- # return tf.layers.flatten(inputs)
- return inputs
- def build(self, input_rgb):
- """
- 构建vgg16网络结构 抽取特征 FP过程
- :param input_rgb: [1, 224, 224, 3]
- :return:
- """
- start_time = time.time()
- logging.info('building start...')
- # 在通道维度上分离 深度可分离卷积中也需要用到这个api
- r, g, b = tf.split(input_rgb, num_or_size_splits=3, axis=3)
- # 在通道维度上拼接
- # 输入vgg网络的图像是bgr的(与OpenCV一样 倒序的)而不是rgb
- x_bgr = tf.concat(values=[
- b - VGG_MEAN[0],
- g - VGG_MEAN[1],
- r - VGG_MEAN[2],
- ], axis=3)
- assert x_bgr.get_shape().as_list()[1:] == [224, 224, 3]
- # 构建网络
- # stage 1
- self.conv1_1 = self.conv_layer(x_bgr, 'conv1_1')
- self.conv1_2 = self.conv_layer(self.conv1_1, 'conv1_2')
- self.pool1 = self.pooling_layer(self.conv1_2, 'pool1')
- # stage 2
- self.conv2_1 = self.conv_layer(self.pool1, 'conv2_1')
- self.conv2_2 = self.conv_layer(self.conv2_1, 'conv2_2')
- self.pool2 = self.pooling_layer(self.conv2_2, 'pool2')
- # stage 3
- self.conv3_1 = self.conv_layer(self.pool2, 'conv3_1')
- self.conv3_2 = self.conv_layer(self.conv3_1, 'conv3_2')
- self.conv3_3 = self.conv_layer(self.conv3_2, 'conv3_3')
- self.pool3 = self.pooling_layer(self.conv3_3, 'pool3')
- # stage 4
- self.conv4_1 = self.conv_layer(self.pool3, 'conv4_1')
- self.conv4_2 = self.conv_layer(self.conv4_1, 'conv4_2')
- self.conv4_3 = self.conv_layer(self.conv4_2, 'conv4_3')
- self.pool4 = self.pooling_layer(self.conv4_3, 'pool4')
- # stage 5
- self.conv5_1 = self.conv_layer(self.pool4, 'conv5_1')
- self.conv5_2 = self.conv_layer(self.conv5_1, 'conv5_2')
- self.conv5_3 = self.conv_layer(self.conv5_2, 'conv5_3')
- self.pool5 = self.pooling_layer(self.conv5_3, 'pool5')
- # flatten_op
- self.flatten = self.flatten_op(self.pool5, 'flatten_op')
- # fc
- self.fc6 = self.fc_layer(self.flatten, 'fc6')
- self.fc7 = self.fc_layer(self.fc6, 'fc7')
- self.fc8 = self.fc_layer(self.fc7, 'fc8', activation=None)
- self.logits = tf.nn.softmax(self.fc8, name='logits')
- logging.info('building end... 耗时%3d秒' % (time.time() - start_time))
- vgg16_npy_path = './vgg16.npy'
- vgg16_data = np.load(vgg16_npy_path, encoding='latin1')
- print(type(vgg16_data))
- data_dict = vgg16_data.item()
- vgg16_for_result = VGGNet(data_dict)
- image_rgb = tf.placeholder(dtype=tf.float32, shape=[1, 224, 224, 3], name='image_rgb')
- vgg16_for_result.build(image_rgb)
- print(vgg16_for_result.conv1_1)
- print(vgg16_for_result.fc6)
复制代码
作者: 虎宝宝 时间: 2019-3-13 19:58
fdsafsadf
作者: weiguangnixia 时间: 2019-3-19 22:49
fsdfasdfdsa
作者: 水水水水 时间: 2019-4-14 22:03
ssssssssssss
作者: 谭浩良 时间: 2019-4-17 09:39
看看大神莫i噢噢噢噢噢噢噢噢
作者: hmiao04 时间: 2019-4-23 09:58
飞得高奋斗过
作者: yqchilde 时间: 2019-4-29 08:58
跟着东方老师学习
作者: 阳阳11 时间: 2019-5-26 17:40
谢谢楼主分享
作者: jlbu 时间: 2019-5-29 14:54
111
作者: 何马 时间: 2019-7-17 12:04
12121
作者: 小小猿 时间: 2019-12-11 09:11
666666
作者: ai111cjs 时间: 2020-1-10 09:23
zanzanzanzan
作者: 老人与海 时间: 2020-1-16 14:45
好好看,学习下
作者: asdfghjkl 时间: 2020-3-11 07:44
qwwwwwwwww
作者: 七七绯 时间: 2020-3-11 21:05
12323333333333332226
作者: xiang 时间: 2020-3-20 16:59
21313fdasasfasd
作者: 415263 时间: 2020-3-23 15:18
66666666666666
作者: a905710420 时间: 2020-3-26 20:04
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
作者: judson 时间: 2020-4-8 14:13
1
作者: 1732077205 时间: 2020-4-8 15:10
666666666666666666666666
作者: 胖达儿 时间: 2020-4-12 19:13
努力学习
作者: 许鸭梨 时间: 2020-4-13 15:04
会根据数据库和
作者: 361822697 时间: 2020-4-15 11:16
来学习啦
作者: 叶子 时间: 2020-4-17 17:53
学习一下
作者: parkyu 时间: 2020-4-24 10:42
gdfhdfhgfhhg
作者: 小白1 时间: 2020-4-29 08:34
哈哈哈哈哈哈哈哈哈
作者: fzp 时间: 2020-5-18 15:45
klklkllklklklklk
作者: 朱轩 时间: 2020-5-23 17:34
想看++++++++++++++++
作者: 万物皆虚 时间: 2020-5-26 14:47
111111111111
作者: balabala 时间: 2020-6-1 11:01
youxiu66666
作者: Honiyo 时间: 2020-6-6 18:58
谢谢分享
作者: Kacehorry 时间: 2020-6-9 15:26
顶顶!!!!!!!!!!!!
作者: 热血斌 时间: 2020-6-10 23:50
东哥讲得好棒
作者: 吧卟啊吧卟 时间: 2020-6-11 19:49
666
作者: tj_Aiden 时间: 2020-7-8 01:05
谢谢,非常感谢!
作者: 冰冰李 时间: 2020-7-8 16:15
感谢分享
作者: polly 时间: 2020-7-11 17:35
赞赞赞赞赞赞赞赞赞赞赞赞赞
作者: Mallika 时间: 2020-7-18 22:18
谢谢耀耀
作者: Mallika 时间: 2020-7-18 22:19
谢谢谢谢十分感谢!!!
作者: 懒虫不懒 时间: 2020-7-28 16:22
bilibili_vgg16
作者: woodcss 时间: 2020-8-18 16:11
asadasdasd
作者: 新疆小王子 时间: 2020-8-27 23:00
rrfdsfsasdasdasdasdasd
作者: 阿森 时间: 2020-8-31 17:12
感谢分享
作者: zkq0519 时间: 2020-9-2 15:33
11
作者: xinxin342 时间: 2020-9-11 17:21
大声膜拜膜拜
作者: 码云家的大外甥 时间: 2020-9-13 20:02
111111111111111111111111111
作者: 唐小龙 时间: 2020-10-20 15:53
正好现在要用到迁移学习
作者: illsysm 时间: 2020-10-24 15:12
作者: shmiwtgy 时间: 2020-10-28 19:05
hgjgkufhjg
作者: 小叮当 时间: 2020-11-2 21:54
回复本贴可见
作者: 记得吃饭 时间: 2020-11-25 22:45
123风格的司法部搜索
作者: ZhouYez 时间: 2020-12-2 22:05
s'f'w'fsffewfsfwef
作者: 肖鹏飞 时间: 2020-12-9 09:57
牛逼牛逼
作者: 286123 时间: 2020-12-12 09:29
1111111111
作者: 666666 时间: 2020-12-14 15:25
wehwehhhhhhhhhhhhhhhhh
作者: 1160314841 时间: 2021-1-6 12:12
谢谢分享
作者: 海大小科比 时间: 2021-1-12 21:19
很好,非常实用,very good
作者: puppy 时间: 2021-1-20 14:17
ggssssssssssssssssss
作者: user_wu 时间: 2021-1-24 17:44
新手来学习
作者: AlotBina 时间: 2021-1-31 13:30
123213123123
作者: bling 时间: 2021-2-20 13:05
下载资料来了
作者: Gruiaaaa 时间: 2021-2-21 16:27
sasasasasas
作者: litty 时间: 2021-3-3 17:05
可以的,跟着学习
作者: ssss_jy 时间: 2021-3-21 12:37
谢谢大佬!
作者: 王天 时间: 2021-3-23 09:13
sssssssssssssss
作者: 安全毕业 时间: 2021-3-25 21:11
需要资料
作者: 17608506138 时间: 2021-4-5 13:05
qweqewqeqewqwe
作者: htczfy 时间: 2021-4-7 12:42
11111111111111111
作者: 菜鸟1号 时间: 2021-4-11 01:07
ssssssgugugug
作者: hangzhoulzt 时间: 2021-4-14 09:01
asdfsdfgkjn,l
作者: vivalaconda 时间: 2021-4-14 14:28
为了学习,冲鸭
作者: 戚学通 时间: 2021-4-28 13:37
VGG16VGGG16
作者: sakura 时间: 2021-5-2 18:58
laillail来俩俩了俩
作者: 郭靖南风 时间: 2021-5-14 10:17
非常不错呢,非常不错呢。
作者: AIstudy 时间: 2021-5-17 18:07
222222222222222222222
作者: tulip 时间: 2021-5-18 16:10
111111111111111111111111111111
作者: qASDSAD 时间: 2021-7-1 14:24
sdaadasdsadgrg
作者: liangsai 时间: 2021-7-6 10:27
老师讲课知识点很新,讲的也很详细
作者: 北叶梦雨 时间: 2021-8-4 11:11
666666666666
作者: DMM 时间: 2021-8-8 15:52
chaolihaide yaolaoshi
作者: carrot_66 时间: 2021-8-18 16:31
666666666666
作者: shishuinianhua 时间: 2021-8-29 16:08
studydsadsa
作者: 123456. 时间: 2021-9-16 20:22
123456safdafdafs
作者: 傅拉师徒的手稿 时间: 2021-10-8 09:21
111111111111
作者: Cynthia 时间: 2021-10-19 15:35
jgjhaswghafgmjd
作者: wangteng 时间: 2021-10-31 17:29
xuexiwedrefr
作者: daodaomomo 时间: 2021-11-4 16:52
赞赞赞赞赞赞赞赞赞赞赞
作者: wolf_DNJJ 时间: 2021-11-12 22:03
大神牛皮
作者: wolf_DNJJ 时间: 2021-11-12 22:04
大神666,哔站跑过来学习一手
作者: peijian 时间: 2021-11-29 15:10
VGG16预训练好的参数加载与模型网络构建_笔记
作者: xzr123 时间: 2021-11-30 10:03
11111122233111
作者: 学徒xt 时间: 2022-1-5 23:41
学习学习
作者: 飞翔的土豆 时间: 2022-1-7 15:41
飞翔的土豆到此处一游
作者: tan99518 时间: 2022-1-9 11:17
T55UUUUUUUUUUU
作者: 1554294651 时间: 2022-2-16 18:14
受益匪浅
作者: wanmeirongyan 时间: 2022-2-27 15:45
xuexixuexi
作者: 19955430637 时间: 2022-3-9 17:55
老师好厉害
作者: wanghuiru 时间: 2022-3-19 22:47
哇哦,牛牛牛666666666666
作者: 12345qaz 时间: 2022-3-22 14:49
作者: 可口可乐 时间: 2022-3-29 21:54
666666666666666666666666666
欢迎光临 东方耀AI技术分享 (http://www.ai111.vip/) |
Powered by Discuz! X3.4 |