博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tensorflow 笔记
阅读量:4940 次
发布时间:2019-06-11

本文共 14345 字,大约阅读时间需要 47 分钟。

1. matMul

#-*-coding:utf-8 -*- import tensorflow as tfw1 = tf.Variable(tf.random_normal([2,3], stddev= 1, seed= 1))w2 = tf.Variable(tf.random_normal([3,1], stddev= 1, seed= 1))x = tf.constant([[0.7, 0.9]]) # 1×2a = tf.matmul(x, w1) # 1×3y = tf.matmul(a, w2) # 1×1sess = tf.Session()# w1 w2sess.run(w1.initializer)sess.run(w2.initializer)sess.run(y)print(y)sess.close()

 

2. eval 函数 作用: 

1.eval(): 将字符串string对象转化为有效的表达式参与求值运算返回计算结果

2.eval()也是启动计算的一种方式。基于Tensorflow的基本原理,首先需要定义图,然后计算图,其中计算图的函数常见的有run()函数,如sess.run()。同样eval()也是此类函数,
3.要注意的是,eval()只能用于tf.Tensor类对象,也就是有输出的Operation。对于没有输出的Operation, 可以用.run()或者Session.run();Session.run()没有这个限制。

import tensorflow as tfx = tf.Variable(3, name="x")y = tf.Variable(4, name="y")z = tf.Variable(4, name="z")w = tf.Variable(4, name="w")f = x * y * z + 3 - w//单个初始化,变量增多,还真是个事with tf.Session() as sess:    x.initializer.run()    y.initializer.run()    z.initializer.run()    w.initializer.run()    print(x)    print(y)    print(z)    print(w)   //f fuction eval 方式和js的eval一样,作为方法函数执行    result = f.eval() print(result)

 

 

3.   矩阵初始化 :

w1 = tf.constant([[1,1,1],[2,2,2]],tf.float32)w2 = tf.constant([[3],[3],[3]],tf.float32)

 

4. 使用GPU计算

g = tf.Graph()with g.device('/gpu:0'):    a = tf.matmul(x, w1) # 1×3    y = tf.matmul(a, w2) # 1×1

 

5.变量     

weights = tf.Variable(tf.random_normal([2,3], stddev = 2))// 产生2行3列  标准差为2 的变量 biases = tf.Variable(tf.zeros([3]) //初值为0 , 含有3个元素的变量 //使用w2变量初值来初始化w3 w2 = tf.Variable(weights.initialized_value()) w3 = tf.Varibale(weights.initialized_value() * 2.0)

 

符号变量

#定义‘符号’变量,也称为占位符 a = tf.placeholder("float") b = tf.placeholder("float")

 

 

6 tensorflow 训练神经网络

# 定义损失函数cross_entropy = -tf.reduce_mean(y_ * tf/log(tf.clip_by_value(y, 1e-10, 1.0)))   //  -y_ln(y)# 定义学习率learning_rate = 0.01#定义反响传播算法train_step = tf.train.AdamOptimizer(learning_rate).minimize(cross_entropy)  //使损失函数最小

 

7. 完整的神经网络训练程序

# -*- coding: utf-8 -*-"""Created on Thu Apr 12 15:58:38 2018@author: 无尾君"""import tensorflow as tffrom numpy.random import RandomStatebatch_size = 8w1 = tf.Variable(tf.random_normal([2,3], stddev= 1, seed= 1))w2 = tf.Variable(tf.random_normal([3,1], stddev= 1, seed= 1))x = tf.placeholder(tf.float32, shape= (None,2), name= 'x-input')y_ = tf.placeholder(tf.float32, shape= (None,1), name= 'y-input')a = tf.matmul(x, w1)y = tf.matmul(a, w2)cross_entropy = -tf.reduce_mean(y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0)))train_step = tf.train.AdamOptimizer(0.001).minimize(cross_entropy)rdm = RandomState(1)dataset_size = 128X = rdm.rand(dataset_size, 2)Y = [[int(x1+ x2 < 1)] for (x1, x2) in X]with tf.Session() as sess:    tf.global_variables_initializer().run()    print(sess.run(w1))    print(sess.run(w2))    STEPS = 5000    for i in range(STEPS):        start = (i * batch_size) % dataset_size        end = min(start + batch_size, dataset_size)        sess.run(train_step, feed_dict = {x: X[start:end], y_: Y[start:end]})        if i % 1000 ==0:            total_cross_entropy = sess.run(cross_entropy, feed_dict = {x: X, y_: Y})            print("After %d training step(s), cross entropy on all data is %g" % (i, total_cross_entropy))

 

 

8 expanddims  :

您可以使用expand_dims(image,0)使其成为1个图像,这将使形状[1,高度,宽度,通道]。

 

 

9 运行会话

#运行会话,输入数据,并计算节点,同时打印结果 sess.run(y, feed_dict={a: 3, b: 3})

 

 

10  算术

 

操作 描述
tf.add(x, y, name=None) 求和
tf.sub(x, y, name=None) 减法
tf.mul(x, y, name=None) 乘法
tf.div(x, y, name=None) 除法
tf.mod(x, y, name=None) 取模
tf.abs(x, name=None) 求绝对值
tf.neg(x, name=None) 取负 (y = -x).
tf.sign(x, name=None) 返回符号 y = sign(x) = -1 if x < 0; 0 if x == 0; 1 if x > 0.
tf.inv(x, name=None) 取反
tf.square(x, name=None) 计算平方 (y = x * x = x^2).
tf.round(x, name=None) 舍入最接近的整数
# ‘a’ is [0.9, 2.5, 2.3, -4.4]
tf.round(a) ==> [ 1.0, 3.0, 2.0, -4.0 ]
tf.sqrt(x, name=None) 开根号 (y = \sqrt{x} = x^{1/2}).
tf.pow(x, y, name=None) 幂次方 
# tensor ‘x’ is [[2, 2], [3, 3]]
# tensor ‘y’ is [[8, 16], [2, 3]]
tf.pow(x, y) ==> [[256, 65536], [9, 27]]
tf.exp(x, name=None) 计算e的次方
tf.log(x, name=None) 计算log,一个输入计算e的ln,两输入以第二输入为底
tf.maximum(x, y, name=None) 返回最大值 (x > y ? x : y)
tf.minimum(x, y, name=None) 返回最小值 (x < y ? x : y)
tf.cos(x, name=None) 三角函数cosine
tf.sin(x, name=None) 三角函数sine
tf.tan(x, name=None) 三角函数tan
tf.atan(x, name=None) 三角函数ctan

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11. transpose

tf.transpose(input, [dimension_1, dimenaion_2,..,dimension_n]):这个函数主要适用于交换输入张量的不同维度用的,如果输入张量是二维,就相当是转置。dimension_n是整数,如果张量是三维,就是用0,1,2来表示。这个列表里的每个数对应相应的维度。如果是[2,1,0],就把输入张量的第三维度和第一维度交换。

Transpose(root.WithOpName("transpose"), dived, { 0,2,1,3 });

 

 

12:   tensorflow C++ API 示例

 

这个貌似有问题  运行崩溃

#include 
#include
#include "tensorflow/cc/ops/const_op.h"#include "tensorflow/cc/ops/image_ops.h"#include "tensorflow/cc/ops/standard_ops.h"#include "tensorflow/core/framework/graph.pb.h"#include "tensorflow/core/framework/tensor.h"#include "tensorflow/core/graph/default_device.h"#include "tensorflow/core/graph/graph_def_builder.h"#include "tensorflow/core/lib/core/errors.h"#include "tensorflow/core/lib/core/stringpiece.h"#include "tensorflow/core/lib/core/threadpool.h"#include "tensorflow/core/lib/io/path.h"#include "tensorflow/core/lib/strings/stringprintf.h"#include "tensorflow/core/platform/init_main.h"#include "tensorflow/core/platform/logging.h"#include "tensorflow/core/platform/types.h"#include "tensorflow/core/public/session.h"#include "tensorflow/core/util/command_line_flags.h"using namespace std ;using namespace tensorflow;using tensorflow::Flag;using tensorflow::Tensor;using tensorflow::Status;using tensorflow::string;using tensorflow::int32;map
int2char;string s = "KDA0123456789 ";for(int i=0;i
* out_tensors) { auto root = Scope::NewRootScope(); using namespace ops; auto file_reader = ops::ReadFile(root.WithOpName("file_reader"),file_name); const int wanted_channels = 1; Output image_reader; std::size_t found = file_name.find(".png"); //判断文件格式 if (found!=std::string::npos) { image_reader = DecodePng(root.WithOpName("png_reader"), file_reader,DecodePng::Channels(wanted_channels)); } else { image_reader = DecodeJpeg(root.WithOpName("jpeg_reader"), file_reader,DecodeJpeg::Channels(wanted_channels)); } // 下面几步是读取图片并处理 auto float_caster =Cast(root.WithOpName("float_caster"), image_reader, DT_FLOAT); auto dims_expander = ExpandDims(root, float_caster, 0); auto resized = ResizeBilinear(root, dims_expander,Const(root.WithOpName("resize"), {input_height, input_width})); // Div(root.WithOpName(output_name), Sub(root, resized, {input_mean}),{input_std}); Transpose(root.WithOpName("transpose"),resized,{
0,2,1,3}); GraphDef graph; root.ToGraphDef(&graph); unique_ptr
session(NewSession(SessionOptions())); session->Create(graph); session->Run({}, {
"transpose"}, {}, out_tensors);//Run,获取图片数据保存到Tensor中 return Status::OK();}int main(int argc, char* argv[]) { string graph_path = "aov_crnn.pb"; GraphDef graph_def; //读取模型文件 if (!ReadBinaryProto(Env::Default(), graph_path, &graph_def).ok()) { cout << "Read model .pb failed"<
session; SessionOptions sess_opt; sess_opt.config.mutable_gpu_options()->set_allow_growth(true); (&session)->reset(NewSession(sess_opt)); if (!session->Create(graph_def).ok()) { cout<<"Create graph failed"<
inputs; // string image_path(argv[1]); string image_path("test.jpg"); if (!ReadTensorFromImageFile(image_path, input_height, input_width,&inputs).ok()) { cout<<"Read image file failed"<
outputs; string input = "inputs_sq"; string output = "results_sq";//graph中的输入节点和输出节点,需要预先知道 pair
img(input,inputs[0]); Status status = session->Run({img},{output}, {}, &outputs);//Run,得到运行结果,存到outputs中 if (!status.ok()) { cout<<"Running model failed"<
(); int output_dim = t.shape().dim_size(1); //预测结果解码为字符串 string res=""; for (int j = 0; j < output_dim; j++) { res+=int2char[tmap(0,j)]; } cout<
<
View Code

 

这个才是对的

#include 
#include
#include
// #include
// #include
#include "tensorflow/cc/ops/const_op.h"#include "tensorflow/cc/ops/image_ops.h"#include "tensorflow/cc/ops/standard_ops.h"#include "tensorflow/core/framework/graph.pb.h"#include "tensorflow/core/framework/tensor.h"#include "tensorflow/core/graph/default_device.h"#include "tensorflow/core/graph/graph_def_builder.h"#include "tensorflow/core/lib/core/errors.h"#include "tensorflow/core/lib/core/stringpiece.h"#include "tensorflow/core/lib/core/threadpool.h"#include "tensorflow/core/lib/io/path.h"#include "tensorflow/core/lib/strings/stringprintf.h"#include "tensorflow/core/platform/env.h"#include "tensorflow/core/platform/init_main.h"#include "tensorflow/core/platform/logging.h"#include "tensorflow/core/platform/types.h"#include "tensorflow/core/public/session.h"#include "tensorflow/core/util/command_line_flags.h"using tensorflow::Flag;using tensorflow::Tensor;using tensorflow::Status;using tensorflow::string;using tensorflow::int32;string model_path = "/work/dl/mosaic/keras/mobilenetv2/trans_model/mosaic.mobilenet_v2_20190425_448X448_DSPD_afew.20.pb";const std::string class_name[2] = { "dummy", "kit fox" };// Given an image file name, read in the data, try to decode it as an image,// resize it to the requested size, and then scale the values as desired.Status ReadTensorFromImageFile(string file_name, const int input_height, const int input_width, const float input_mean, const float input_std, std::vector
* out_tensors) { auto root = tensorflow::Scope::NewRootScope(); using namespace ::tensorflow::ops; // NOLINT(build/namespaces) string input_name = "file_reader"; string output_name = "normalized"; auto file_reader = tensorflow::ops::ReadFile(root.WithOpName(input_name), file_name); // Now try to figure out what kind of file it is and decode it. const int wanted_channels = 3; tensorflow::Output image_reader; //if (tensorflow::StringPiece(file_name).ends_with(".png")) { // image_reader = DecodePng(root.WithOpName("png_reader"), file_reader, // DecodePng::Channels(wanted_channels)); //} //else if (tensorflow::StringPiece(file_name).ends_with(".gif")) { // image_reader = DecodeGif(root.WithOpName("gif_reader"), file_reader); //} //else { // Assume if it's neither a PNG nor a GIF then it must be a JPEG. image_reader = DecodeJpeg(root.WithOpName("jpeg_reader"), file_reader, DecodeJpeg::Channels(wanted_channels)); } // Now cast the image data to float so we can do normal math on it. auto float_caster = Cast(root.WithOpName("float_caster"), image_reader, tensorflow::DT_FLOAT); // The convention for image ops in TensorFlow is that all images are expected // to be in batches, so that they're four-dimensional arrays with indices of // [batch, height, width, channel]. Because we only have a single image, we // have to add a batch dimension of 1 to the start with ExpandDims(). auto dims_expander = ExpandDims(root, float_caster, 0); // Bilinearly resize the image to fit the required dimensions. auto resized = ResizeBilinear( root, dims_expander, Const(root.WithOpName("size"), { input_height, input_width })); // Subtract the mean and divide by the scale. Div(root.WithOpName(output_name), Sub(root, resized, { input_mean }), { input_std }); // This runs the GraphDef network definition that we've just constructed, and // returns the results in the output tensor. tensorflow::GraphDef graph; TF_RETURN_IF_ERROR(root.ToGraphDef(&graph)); std::unique_ptr
session( tensorflow::NewSession(tensorflow::SessionOptions())); TF_RETURN_IF_ERROR(session->Create(graph)); TF_RETURN_IF_ERROR(session->Run({}, { output_name }, {}, out_tensors)); return Status::OK();}int main(int argc, char* argv[]) { string graph_path = model_path; tensorflow::port::InitMain(argv[0], &argc, &argv); tensorflow::GraphDef graph_def; if (!ReadBinaryProto(tensorflow::Env::Default(), graph_path, &graph_def).ok()) { LOG(ERROR) << "Read proto"; return -1; } std::unique_ptr
session; tensorflow::SessionOptions sess_opt; sess_opt.config.mutable_gpu_options()->set_allow_growth(true); (&session)->reset(tensorflow::NewSession(sess_opt)); if (!session->Create(graph_def).ok()) { LOG(ERROR) << "Create graph"; return -1; } const int batch_size = argc - 1; if (batch_size != 1) { LOG(ERROR) << "Batch mode for the pretrained inception-v3 is unsupported"; LOG(ERROR) << " - https://github.com/tensorflow/tensorflow/issues/554"; return -1; } int32 input_dim = 448; float input_mean = 128; float input_std = 128; std::vector
inputs; std::string image_path(argv[1]); if (!ReadTensorFromImageFile(image_path, input_dim, input_dim, input_mean, input_std, &inputs).ok()) { LOG(ERROR) << "Load image"; return -1; } std::vector
outputs; //string input_layer = "Mul"; //string output_layer = "softmax"; string input_layer = "input_1"; string output_layer = "dense_2/Softmax"; if (!session->Run({ { input_layer, inputs[0] } }, { output_layer }, {}, &outputs).ok()) { LOG(ERROR) << "Running model failed"; return -1; } printf("Is predicting ... \n"); //得到模型运行结果 Tensor t = outputs[0]; auto tmap = t.tensor
(); for (int i = 0; i != 2; ++i) { printf("p[%d]=%.2f\n", i, tmap(0, i)); } int output_dim = t.shape().dim_size(1); for (int j = 0; j < output_dim; j++) { tmap(0, j); } printf("predicting OK \n"); //Eigen::Map
pred(outputs[0].flat
().data(), // outputs[0].NumElements()); //int maxIndex; float maxValue = pred.maxCoeff(&maxIndex); //LOG(INFO) << "P( " << class_name[maxIndex] << " | image ) = " << maxValue; return 0;}
View Code

 

编译 :

g++ -g -D_GLIBCXX_USE_CXX11_ABI=0 tf_predict.cpp -o tf_predict -I /usr/include/eigen3 -I /usr/local/include/tf  -L/usr/local/lib/ `pkg-config --cflags --libs protobuf`  -ltensorflow_cc  -ltensorflow_framework

 

使用Opencv 读取tensor

tensorflow::Tensor readTensor(string filename){    tensorflow::Tensor input_tensor(DT_FLOAT,TensorShape({
1,240,40,1})); Mat src=imread(filename,0); Mat dst; resize(src,dst,Size(240,40));//resize Mat dst_transpose=dst.t();//transpose auto tmap=input_tensor.tensor
(); for(int i=0;i<240;i++){
//Mat复制到Tensor for(int j=0;j<40;j++){ tmap(0,i,j,0)=dst_transpose.at
(i,j); } } return input_tensor;}

 

 

13  tensorflow 取指针

float* p = input_tensor.flat
().data()

 

转载于:https://www.cnblogs.com/luoyinjie/p/10875569.html

你可能感兴趣的文章
设置session超时的三种方式
查看>>
在 SharePoint Server 2016 本地环境中设置 OneDrive for Business
查看>>
python数据分析-数据处理
查看>>
【转】JAVA进阶之路
查看>>
java调用sqlserver存储过程
查看>>
前端多选插件bootstrap-select的使用
查看>>
建议博客园搭个威客平台,可行的发展方向和盈利方向
查看>>
零基础英文盲打的建议
查看>>
JavaSE基础第四篇
查看>>
MVC中Model
查看>>
操作系统真象还原 文件系统的建立
查看>>
模拟游客一天的生活与旅游java程序代写源码
查看>>
周涛:利用协同标签,解决冷启动问题
查看>>
小米2S Mk6.0.1 [只能做测试体验,不能使用]
查看>>
微信授权获取用户信息
查看>>
strtol,比atoi
查看>>
spider_使用parse,urlencode,爬取豆瓣电影(get请求拼接url)
查看>>
Debian安装中文输入法
查看>>
GMA Round 1 最短距离
查看>>
HTML5 Canvas 超炫酷烟花绽放动画教程
查看>>