TensorFlowJS
文章平均质量分 92
makefish
Graphics,Chromium
展开
-
TensorFlowJS 如何export一个async API
下属代码讨论的都是位于tfjs-core里面。容易想到的是,在browser.ts增加:async function fromPixelsAsync_( pixels: PixelData | ImageData | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement, numChannels = 3): Promise<Tensor3D> { return await fromPixels(原创 2020-09-27 10:37:16 · 829 阅读 · 0 评论 -
TypeScript的Memory leak
在C++语言里面,申明了一个对象,当代码走出了对象的作用域的时候,这个对象的析构函数会被调用,因而给用户提供了自主释放资源的机会,无论这个资源是位于内存还是显存,都没有关系。譬如下面的代码,String a1的资源释放过程是:先调用析构函数String::~String,然后释放a1 对象本身(譬如size,vtable等)。#include <iostream>#include <cstring>using namespace std; class String {原创 2020-06-28 10:14:12 · 535 阅读 · 0 评论 -
tf.grads的使用
TFJS的源码并没有对第三个参数dy进行注释。官方文档也仅仅给出了前两个参数https://js.tensorflow.org/api/latest/#grads的示例。具体使用第三个参数的示例是:const a = tf.scalar(5);const b = tf.scalar(2);const dy = tf.scalar(4);const before = tf.memory(...原创 2020-01-13 15:19:28 · 168 阅读 · 0 评论 -
CUDA共享内存用于加速矩阵转置
直观上来看,矩阵转置和卷积等操作不同,不存在数据共享(卷积窗口在输入数据上滑动的时候,相邻数据存在共享),因为仅仅是将数据换个位置存储而已。但是NVIDIA在https://github.com/NVIDIA-developer-blog/code-samples.git实现了一种基于共享内存的转置算法,在某些场景实现了两倍以上的加速,示意如下图(从做到右依次是:输入,共享内存,输出):其原...原创 2019-10-10 09:39:13 · 770 阅读 · 1 评论 -
TFJS:conv2d输入输出形状的计算computeConv2DInfo
conv2d包含了两个输入参数:x,filter。一个输出参数:output shape。参考源码:https://github.com/tensorflow/tfjs-core/blob/master/src/ops/conv_util.ts, 版本号7833594输入参数的处理conv2d有两个输入参数:x和filter。 * @param x The input tensor, of...原创 2019-06-25 10:13:44 · 1183 阅读 · 0 评论 -
深度可分离卷积的Depth,Stack,Channel Multiplier
通道数目的不同单通道的卷积下面的代码测试了仅仅一个属性(depth是1)的深度卷积,其结果和普通卷积是一样的:async function depthwiseConv2dTestSingleDepth() { const fSize = 2; const pad = 'valid'; const stride = 1; const chMul = 1; const inD...原创 2019-06-11 13:30:23 · 2154 阅读 · 0 评论 -
TensorFlowJS的卷积和深度可分离卷积实现
本文介绍GPU实现的Conv2DProgram。逻辑输出坐标:xRCorner,xCCorner。卷积的基本流程:用高宽分别是filterHeightxfilterWidth的卷积核对输入数据做卷积。要注意的是:输入数据和卷积核除了有高度和宽度之外,还有一个参数,深度convInfo.inChannels。所以卷积就变成了:对逻辑输出坐标对应的所有深度的的通道,依次做getX()xgetW...原创 2019-04-12 15:57:38 · 574 阅读 · 0 评论 -
TensorFlowJS之Shader的生成
TFJS里面很常见这个map-join模式。function updateItem(x) { return x.name+&quot;:&quot;+x.value;}var array = [];array.push({ name: 1, value: &quot;a&quot; });array.push({ name: 2, value: &quot;b&quot; });const map1原创 2019-02-20 14:37:49 · 195 阅读 · 0 评论 -
TensorFlowJS-算子的常见用法
TensorFlowJS的算子(tfjs-core/src/ops)有两种常见的用法。第一种,直接在JS代码里面调用tfjs-core/src/ops里面的算子,譬如tf.conv2d就会调用tfjs-core/src/ops里面的conv2d算子。第二种,创建Layer,Layer里面会调用算子。譬如通过tf.layers.conv2d创建的Layer就封装了卷积运算。tf.conv2...原创 2019-02-24 21:24:57 · 692 阅读 · 0 评论 -
TensorFlowJS的入门资料
接口部分最基本的核心概念:Tensor,Tensor的运算https://js.tensorflow.org/tutorials/core-concepts.htmlLayer的创建和概念:https://js.tensorflow.org/tutorials/tfjs-layers-for-keras-users.html模型。模型是和Layer关系很紧密的概念,或者说,模型描述了La...原创 2019-02-24 20:56:10 · 468 阅读 · 0 评论 -
TensorFlowJS-Model
模型用来描述Layer之间的拓扑逻辑关系,即一个Layer的输出,以何种形式作为下一个Layer的输入。模型可以被用来训练和预测。模型的状态(包括拓扑逻辑,训练得到的权重)可以从其他的格式里面恢复过来。有两种创建模型的方式: tf.sequential和tf.model。tf.sequential简单的类似栈一样的关系。就是每一层的输入,依赖于上一层的输出(我理解的是:一层的某个Tensor...原创 2019-02-23 20:47:30 · 304 阅读 · 0 评论 -
TenorFlowJS-激活函数
概述激活函数用来决定一个神经元的最终的输出。譬如对一个细胞来说,理想的输出是0和1。但是如果真实的输出是0.85的话,这个时候用来决定输出是0还是1的函数就叫激活函数。激活函数或者位于网络的尾部,用于调整输出,或者位于Layer之间。本文介绍激活函数用于Dense Layer的情况。图片来自:https://cdn-images-1.medium.com/max/1400/0*44z99...原创 2019-02-27 16:53:12 · 237 阅读 · 0 评论 -
TensorFlowJS之DataStorage的set/get和write/read
作者的经验是,set/get其实就是对对象数据的读和写。TypeScript实现的DataStorage看起来似乎有点另类(作者第一次分析这么庞大的JavaScript/TypeScript项目)。另类在:它既有set/get,同时还有write/read。Set/Getset/get是直接封装在DataStorage的类型定义里面的: write(dataId: DataId, valu...原创 2019-02-03 14:23:17 · 256 阅读 · 0 评论 -
TensorflowJS之Tensor
可以将Tensor当作一个数据结构,里面的数据可以是一个数,也可以是1维数组,2维的矩阵,以及更高维的矩阵。TensorflowJS支持CPU和GPU两种后端。虽然输入的数据都是Tensor,但是对数据的处理有较大的差异。如果是CPU,数据的处理相对简单,如下图所示:如果是GPU,则需要将Tensor里面的数据上传到一个WebGL Texture里面。然后在GPU处理结束后,将数据写回这个输...原创 2019-02-02 10:03:40 · 457 阅读 · 0 评论