参考:

TensorFlow 自定义模型导出:将 .ckpt 格式转化为 .pb 格式

TensorFlow 模型保存与恢复

snpe

tensorflow 模型前向传播 保存ckpt  tensorbard查看 ckpt转pb  pb 转snpe dlc 实例

log文件

输入节点 图像高度 图像宽度 图像通道数

input0 6,6,3

输出节点

--out_node add

snpe-tensorflow-to-dlc --graph ./simple_snpe_log/model200.pb -i input0 6,6,3 --out_node add

#coding:utf-8
#http://blog.csdn.net/zhuiqiuk/article/details/53376283
#http://blog.csdn.net/gan_player/article/details/77586489
from __future__ import absolute_import, unicode_literals
import tensorflow as tf
import shutil
import os.path
from tensorflow.python.framework import graph_util
import mxnet as mx
import numpy as np
import random
import cv2
from time import sleep
from easydict import EasyDict as edict
import logging
import math
import tensorflow as tf
import numpy as np def FullyConnected(input, fc_weight, fc_bias, name):
fc = tf.matmul(input, fc_weight) + fc_bias
return fc def inference(body, name_class,outchannel):
wkernel = 3
inchannel = body.get_shape()[3].value
conv_weight = np.arange(wkernel * wkernel * inchannel * outchannel,dtype=np.float32).reshape((outchannel,inchannel,wkernel,wkernel))
conv_weight = conv_weight / (outchannel*inchannel*wkernel*wkernel)
print("conv_weight ", conv_weight)
conv_weight = conv_weight.transpose(2,3,1,0)
conv_weight = tf.Variable(conv_weight, dtype=np.float32, name = "conv_weight")
body = tf.nn.conv2d(body, conv_weight, strides=[1, 1, 1, 1], padding='SAME', name = "conv0")
conv = body
conv_shape = body.get_shape()
dim = conv_shape[1].value * conv_shape[2].value * conv_shape[3].value
body = tf.reshape(body, [1, dim], name = "fc0")
fc_weight = np.ones((dim, name_class))
fc_bias = np.zeros((1, name_class))
fc_weight = tf.Variable(fc_weight, dtype=np.float32, name="fc_weight")
fc_bias = tf.Variable(fc_bias, dtype=np.float32, name="fc_bias")
# tf.constant(100,dtype=np.float32, shape=(body.get_shape()[1] * body.get_shape()[2] * body.get_shape()[3], name_class])
# fc_bias = tf.constant(10, dtype=np.float32, shape=(1, name_class])
body = FullyConnected(body, fc_weight, fc_bias, "fc0")
return conv, body export_dir = "simple_snpe_log"
def saveckpt():
height = 6
width = 6
inchannel = 3
outchannel = 3
graph = tf.get_default_graph()
with tf.Graph().as_default():
input_image = tf.placeholder("float", [1, height, width, inchannel], name = "input0")
conv, logdit = inference(input_image,10,outchannel)
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
img = np.arange(height * width * inchannel, dtype=np.float32).reshape((1,inchannel,height,width)) \
/ (1 * inchannel * height * width) * 255.0 - 127.5
print("img",img)
img = img.transpose(0,2,3,1)
import time
since = time.time()
fc = sess.run(logdit,{input_image:img})
conv = sess.run(conv, {input_image: img})
time_elapsed = time.time() - since
print("tf inference time ", str(time_elapsed))
print("conv", conv.transpose(0, 2, 3, 1))
print("fc", fc)
#np.savetxt("tfconv.txt",fc)
#print( "fc", fc.transpose(0,3,2,1))
#np.savetxt("tfrelu.txt",fc.transpose(0,3,2,1)[0][0]) # #save ckpt
export_dir = "simple_snpe_log"
saver = tf.train.Saver()
step = 200
# if os.path.exists(export_dir):
# os.system("rm -rf " + export_dir)
if not os.path.isdir(export_dir): # Create the log directory if it doesn't exist
os.makedirs(export_dir) checkpoint_file = os.path.join(export_dir, 'model.ckpt')
saver.save(sess, checkpoint_file, global_step=step) def LoadModelToTensorBoard():
graph = tf.get_default_graph()
checkpoint_file = os.path.join(export_dir, 'model.ckpt-200.meta')
saver = tf.train.import_meta_graph(checkpoint_file)
print(saver)
summary_write = tf.summary.FileWriter(export_dir , graph)
print(summary_write) def ckptToPb():
checkpoint_file = os.path.join(export_dir, 'model.ckpt-200.meta')
ckpt = tf.train.get_checkpoint_state(export_dir)
print("model ", ckpt.model_checkpoint_path)
saver = tf.train.import_meta_graph(ckpt.model_checkpoint_path +'.meta')
graph = tf.get_default_graph()
with tf.Session() as sess:
saver.restore(sess,ckpt.model_checkpoint_path)
height = 6
width = 6
input_image = tf.get_default_graph().get_tensor_by_name("input0:0")
fc0_output = tf.get_default_graph().get_tensor_by_name("add:0")
sess.run(tf.global_variables_initializer())
output_graph_def = tf.graph_util.convert_variables_to_constants(
sess, graph.as_graph_def(), ['add'])
model_name = os.path.join(export_dir, 'model200.pb')
with tf.gfile.GFile(model_name, "wb") as f:
f.write(output_graph_def.SerializeToString()) def PbTest():
with tf.Graph().as_default():
output_graph_def = tf.GraphDef()
output_graph_path = os.path.join(export_dir,'model200.pb')
with open(output_graph_path, "rb") as f:
output_graph_def.ParseFromString(f.read())
tf.import_graph_def(output_graph_def, name="") with tf.Session() as sess:
tf.initialize_all_variables().run()
height = 6
width = 6
inchannel = 3
outchannel = 3
input_image = tf.get_default_graph().get_tensor_by_name("input0:0")
fc0_output = tf.get_default_graph().get_tensor_by_name("add:0")
conv = tf.get_default_graph().get_tensor_by_name("conv0:0") img = np.arange(height * width * inchannel, dtype=np.float32).reshape((1,inchannel,height,width)) \
/ (1 * inchannel * height * width) * 255.0 - 127.5
print("img",img)
img = img.transpose(0,2,3,1)
import time
since = time.time()
fc0_output = sess.run(fc0_output,{input_image:img})
conv = sess.run(conv, {input_image: img})
time_elapsed = time.time() - since
print("tf inference time ", str(time_elapsed))
print("conv", conv.transpose(0, 2, 3, 1))
print("fc0_output", fc0_output) if __name__ == '__main__': saveckpt() #1
LoadModelToTensorBoard()#2
ckptToPb()#3
PbTest()#

tensorflow 模型前向传播 保存ckpt tensorbard查看 ckpt转pb pb 转snpe dlc 实例的更多相关文章

  1. Tensorflow模型加载与保存、Tensorboard简单使用

    先上代码: from __future__ import absolute_import from __future__ import division from __future__ import ...

  2. TensorFlow模型加载与保存

    我们经常遇到训练时间很长,使用起来就是Weight和Bias.那么如何将训练和测试分开操作呢? TF给出了模型的加载与保存操作,看了网上都是很简单的使用了一下,这里给出一个神经网络的小程序去测试. 本 ...

  3. 利用tensorflow实现前向传播

    import tensorflow as tf w1 = tf.Variable(tf.random_normal((2, 3), stddev=1, seed=1))w2 = tf.Variable ...

  4. Tensorflow笔记——神经网络图像识别(一)前反向传播,神经网络八股

      第一讲:人工智能概述       第三讲:Tensorflow框架         前向传播: 反向传播: 总的代码: #coding:utf-8 #1.导入模块,生成模拟数据集 import t ...

  5. tensorflow模型的保存与恢复,以及ckpt到pb的转化

    转自 https://www.cnblogs.com/zerotoinfinity/p/10242849.html 一.模型的保存 使用tensorflow训练模型的过程中,需要适时对模型进行保存,以 ...

  6. tensorflow模型持久化保存和加载

    模型文件的保存 tensorflow将模型保持到本地会生成4个文件: meta文件:保存了网络的图结构,包含变量.op.集合等信息 ckpt文件: 二进制文件,保存了网络中所有权重.偏置等变量数值,分 ...

  7. Tensorflow模型变量保存

    Tensorflow:模型变量保存 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献Tensorflow实战Google深度学习框架 实验平台: Tensorflow1.4.0 pyt ...

  8. tensorflow模型持久化保存和加载--深度学习-神经网络

    模型文件的保存 tensorflow将模型保持到本地会生成4个文件: meta文件:保存了网络的图结构,包含变量.op.集合等信息 ckpt文件: 二进制文件,保存了网络中所有权重.偏置等变量数值,分 ...

  9. 超详细的Tensorflow模型的保存和加载(理论与实战详解)

    1.Tensorflow的模型到底是什么样的? Tensorflow模型主要包含网络的设计(图)和训练好的各参数的值等.所以,Tensorflow模型有两个主要的文件: a) Meta graph: ...

随机推荐

  1. maven学习(5)-maven中常见错误

    maven报错非法字符:\65279 错误 开发中一个项目很早就报这个错,maven报错非法字符:\ 错误, 开发过程中偶尔会遇到,今天终于下决心要解决这个问题 编译java 文件的时候,有些java ...

  2. 从基础学起----xuld版高手成长手记[1]

    别人的代码总是看不懂? 想实现一个功能总是无从下手? 学会一个,但稍微变个花样就不知道了? 无论你擅长什么编程语言,如果你觉得自己基础薄弱,想从头开始学起,那本文将适合你. 这篇文章的含金量非常高,如 ...

  3. iOS10 UI教程层次结构的事件

    iOS10 UI教程层次结构的事件 iOS10 UI教程层次结构的事件,层次结构中存在7个事件,对于这些事件的介绍如表1-3所示.通过这些事件,可以监听视图,当视图在层次结构上发生变化时可以被拦截,也 ...

  4. [JavaScript]JavaScript处理iframe的动作

    随着W3C一声令下,几年前使用非常频繁的frameset + frame已完成使命,光荣退伍.作为frameset的替代方案(姑且这么称吧),iframe的使用也多了起来.较frameset方案,if ...

  5. 【转】【cocos2d-x教程】如何使用WebSocket

    介绍 WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术.在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快 ...

  6. pwn入门之栈溢出练习

    本文原创作者:W1ngs,本文属i春秋原创奖励计划,未经许可禁止转载!前言:最近在入门pwn的栈溢出,做了一下jarvisoj里的一些ctf pwn题,感觉质量都很不错,难度循序渐进,把自己做题的思路 ...

  7. 我的Nginx配置文件

    #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #erro ...

  8. javascript动态加载js文件主流浏览器兼容版

    一.代码示例: <html> <head> <meta http-equiv="Content-Type" content="text/ht ...

  9. 转:TCP为什么要3次握手和4次挥手时等待2MSL、 TCP如何保证消息顺序以及可靠性到达

    关于tcp三次握手.四次挥手可以看这里:TCP与UDP的差别以及TCP三次握手.四次挥手 1.TCP为甚要3次握手? 在谢希仁著<计算机网络>第四版中讲“三次握手”的目的是“为了防止已失效 ...

  10. c++单例模式代码分析

    单例模式就是一个C++语法精华浓缩的一个体现,有句老话:麻雀虽小五脏俱全!来形容单例非常贴切! 下面的代码分析了如果自己malloc并且memcpy一个单例指针会带来很大危害并如何防止这种情况发生. ...