TensorFlow-6-TensorBoard 可视化学习

本文介绍了如何使用TensorFlow的TensorBoard进行神经网络训练的可视化。内容包括TensorBoard的作用,如何显示accuracy、cross entropy等指标,以及tf.summary.scalar、tf.summary.histogram、tf.summary.merge_all和tf.summary.FileWriter等关键API的使用方法。示例代码展示了如何生成和观察scalar和histogram图表,并提供了完整的mnist_with_summaries.py代码链接。
摘要由CSDN通过智能技术生成

学习资料:
https://www.tensorflow.org/get_started/summaries_and_tensorboard

中文翻译:
http://wiki.jikexueyuan.com/project/tensorflow-zh/how_tos/summaries_and_tensorboard.html

今天学的内容是 TensorBoard
它的作用就是可以把复杂的神经网络训练过程给可视化,可以更好地理解 调试 优化程序。

在之前的几节,我们都只是建立了模型,例如这个代码:
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/mnist/mnist_softmax.py

这一节我们我们可以把想看的东西显示出来,如 accuracy,cross entropy,bias 和 weights 等等。

先来看效果:

如下图,就可以在 Tensorboard 的 scalars 下看到 accuracy,cross entropy,dropout,layer1 和 layer2 的 bias 和 weights 的趋势


主要用到的了下面四个方法
其他可以看 Summary Operations:
https://www.tensorflow.org/

地震勘探逆时偏移(Reverse Time Migration, RTM)是一种基于波动方程的成像方法,可以用于提高地下结构的图像分辨率。以下是一个简单的C语言实现的RTM算法程序: ```c #include <stdio.h> #include <stdlib.h> #include <math.h> #define NX 100 // X方向采样点数 #define NZ 100 // Z方向采样点数 #define DT 0.001 // 时间步长 #define DX 10.0 // X方向采样间距 #define DZ 10.0 // Z方向采样间距 #define VP 2000 // 声波速度 float p0[NX][NZ]; // 初始压力场 float p1[NX][NZ]; // 当前压力场 float p2[NX][NZ]; // 下一时间步压力场 float v[NX][NZ]; // 速度模型 // 计算速度模型 void init_v() { int i, j; for (i = 0; i < NX; i++) { for (j = 0; j < NZ; j++) { if (i >= NX / 2 && i <= NX * 3 / 4 && j >= NZ / 4 && j <= NZ * 3 / 4) { v[i][j] = VP * 1.5; } else { v[i][j] = VP; } } } } // 计算初始压力场 void init_p() { int i, j; float x, z; for (i = 0; i < NX; i++) { for (j = 0; j < NZ; j++) { x = (i - NX / 2) * DX; z = (j - NZ / 2) * DZ; p0[i][j] = 0.1 * exp(-x * x / 10000 - z * z / 10000); } } } // 执行一次时间步 void time_step() { int i, j; float dx, dz, c1, c2, c3, c4; for (i = 1; i < NX - 1; i++) { for (j = 1; j < NZ - 1; j++) { dx = DX / v[i][j]; dz = DZ / v[i][j]; c1 = (p1[i + 1][j] - 2 * p1[i][j] + p1[i - 1][j]) / (dx * dx); c2 = (p1[i][j + 1] - 2 * p1[i][j] + p1[i][j - 1]) / (dz * dz); c3 = (p0[i][j] + p1[i][j]) / 2; c4 = (p1[i + 1][j] - p1[i - 1][j]) / (2 * DX) + (p1[i][j + 1] - p1[i][j - 1]) / (2 * DZ); p2[i][j] = 2 * p1[i][j] - p0[i][j] + c1 * DT * DT + c2 * DT * DT - c3 * DT * DT + c4 * DT; } } } // 执行RTM算法 void rtm() { int n, i, j; init_v(); init_p(); for (n = 0; n < 1000; n++) { time_step(); // 边界处理(反射) for (i = 0; i < NX; i++) { p2[i][0] = -p2[i][1]; p2[i][NZ - 1] = -p2[i][NZ - 2]; } for (j = 0; j < NZ; j++) { p2[0][j] = -p2[1][j]; p2[NX - 1][j] = -p2[NX - 2][j]; } // 交换压力场 for (i = 0; i < NX; i++) { for (j = 0; j < NZ; j++) { p0[i][j] = p1[i][j]; p1[i][j] = p2[i][j]; } } } } int main() { rtm(); return 0; } ``` 这个程序实现了一个简单的维RTM算法,其中速度模型是一个简单的区域模型,初始压力场是一个高斯形状的脉冲。程序使用了阶中心差分离散化波动方程,并使用了交错网格(staggered grid)来避免数值耦合。程序还使用了边界处理(反射)来模拟波在边界处反射的现象。由于RTM算法计算量较大,本程序只执行了1000次时间步。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值