0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

TensorFlow.js 的基本構(gòu)建塊及其操作,如何創(chuàng)建一些復(fù)雜的模型

Tensorflowers ? 來(lái)源:未知 ? 作者:李倩 ? 2018-08-01 11:37 ? 次閱讀

這創(chuàng)造了一個(gè)標(biāo)量張量。我們還可以將數(shù)組轉(zhuǎn)換為張量。

Tensorflow.js 是一個(gè)基于 deeplearn.js 構(gòu)建的庫(kù),可直接在瀏覽器環(huán)境中創(chuàng)建深度學(xué)習(xí)模型。使用它可以在瀏覽器上創(chuàng)建 CNNs,RNNs 等,并使用客戶(hù)端的 GPU 處理能力訓(xùn)練這些模型。因此,訓(xùn)練 NN 并不一定需要服務(wù)器級(jí)別的 GPU。本教程首先解釋 TensorFlow.js 的基本構(gòu)建塊及其操作。然后,我們描述了如何創(chuàng)建一些復(fù)雜的模型。

我在 Observable 上創(chuàng)建了一個(gè)交互式編碼會(huì)話(huà),可用于代碼演示。此外,我創(chuàng)建了許多迷你項(xiàng)目,包括簡(jiǎn)單分類(lèi),樣式轉(zhuǎn)換,姿勢(shì)評(píng)估和 pix2pix 翻譯。

入門(mén)

由于 TensorFlow.js 在瀏覽器上運(yùn)行,您只需將以下腳本包含在 html 文件的 header 中即可:

1

以上會(huì)自動(dòng)加載最新版本的 TensorFlow.js。

張量(Tensor)

如果您熟悉 TensorFlow 等深度學(xué)習(xí)平臺(tái),您應(yīng)該能夠認(rèn)識(shí)到張量是 Operators 使用的 n 維數(shù)組。因此,它們代表了任何深度學(xué)習(xí)應(yīng)用程序的構(gòu)建塊。讓我們創(chuàng)建一個(gè)張量:

1const tensor = tf.scalar(2);

以上創(chuàng)建了一個(gè)張量。我們還可以將數(shù)組轉(zhuǎn)換為張量:

1const input = tf.tensor([2,2]);

這會(huì)創(chuàng)建一個(gè)恒定的數(shù)組張量[2,2]。換句話(huà)說(shuō),我們通過(guò)應(yīng)用張量函數(shù)將一維數(shù)組轉(zhuǎn)換為張量。我們可以使用 input.shape 獲取張量大小。

1const tensor_s = tf.tensor([2,2]).shape;

我們還可以創(chuàng)建具有特定大小的張量:

1const input = tf.zeros([2,2]);

操作(Operators)

為了使用張量,我們需要?jiǎng)?chuàng)建操作。如下所示,可以獲取到張量的平方:

1const a = tf.tensor([1,2,3]);

2a.square().print();

TensorFlow.js 還允許鏈接操作。例如,要評(píng)估我們使用的張量的二次冪:

1const x = tf.tensor([1,2,3]);

2const x2 = x.square().square();

Tensor Disposal

通常我們會(huì)生成大量的中間張量。例如,在前面的例子中,我們不需要生成 const x。為了做到這一點(diǎn),我們可以調(diào)用 dispose():

1const x = tf.tensor([1,2,3]);

2x.dispose();

請(qǐng)注意,我們?cè)谝院蟮牟僮髦胁辉偈褂脧埩?x?,F(xiàn)在,對(duì)于每個(gè)張量來(lái)說(shuō),這可能有點(diǎn)不方便。

TensorFlow.js 提供了一個(gè)特殊的操作 tidy() 來(lái)自動(dòng)處理中間張量:

1function f(x)

2{

3return tf.tidy(()=>{

4const y = x.square();

5const z = x.mul(y);

6return z

7});

8}

請(qǐng)注意,張量 y 的值將被處理,因?yàn)槲覀冊(cè)谠u(píng)估 z 的值之后不再需要它。

優(yōu)化問(wèn)題

在這里,我們將學(xué)習(xí)如何解決優(yōu)化問(wèn)題。給定函數(shù) f(x),基于 x = a 評(píng)估最小化 f(x)。為此,我們需要一個(gè)優(yōu)化器。優(yōu)化器是一種通過(guò)漸變來(lái)最小化函數(shù)的算法。文獻(xiàn)中有許多優(yōu)化器,如 SGD,Adam 等......這些優(yōu)化器的速度和準(zhǔn)確性各不相同。Tensorflowjs 支持最重要的優(yōu)化器。

我們將舉一個(gè)簡(jiǎn)單的例子:f(x)=x?+2x?+3x2+ x + 1。函數(shù)圖如下所示。我們看到函數(shù)的最小值在區(qū)間內(nèi) [-0.5,0] 。我們將使用優(yōu)化器來(lái)查找確切的值。

首先,我們定義需要最小化的函數(shù)

1function f(x)

2{

3const f1 = x.pow(tf.scalar(6, 'int32')) //x^6

4const f2 = x.pow(tf.scalar(4, 'int32')).mul(tf.scalar(2)) //2x^4

5const f3 = x.pow(tf.scalar(2, 'int32')).mul(tf.scalar(3)) //3x^2

6const f4 = tf.scalar(1) //1

7return f1.add(f2).add(f3).add(x).add(f4)

8}

現(xiàn)在我們可以迭代該函數(shù)以找到最小值。我們將以 a = 2 的初始值開(kāi)始。學(xué)習(xí)速率定義了我們達(dá)到最小值的速度。我們將使用 Adam 優(yōu)化器

1function minimize(epochs , lr)

2{

3let y = tf.variable(tf.scalar(2)) //initial value

4const optim = tf.train.adam(lr); //gadient descent algorithm

5for(let i = 0 ; i < epochs ; i++) //start minimiziation ?? ?

6optim.minimize(() => f(y));

7return y

8}

當(dāng)學(xué)習(xí)速率為 0.9 時(shí),迭代 200 次之后找到最小值 -0.16092407703399658。

一個(gè)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)

現(xiàn)在我們學(xué)習(xí)如何創(chuàng)建一個(gè)神經(jīng)網(wǎng)絡(luò)來(lái)學(xué)習(xí) XOR,這是一個(gè)非線性操作。代碼類(lèi)似于 keras 實(shí)現(xiàn)。我們首先創(chuàng)建了兩個(gè)輸入和一個(gè)輸出的訓(xùn)練集。

1xs = tf.tensor2d([[0,0],[0,1],[1,0],[1,1]])

2ys = tf.tensor2d([[0],[1],[1],[0]])

然后我們創(chuàng)建兩個(gè)具有不同非線性激活函數(shù)的密集層。我們使用具有交叉熵?fù)p失的隨機(jī)梯度下降。學(xué)習(xí)速率是 0.1

1function createModel()

2{

3var model = tf.sequential()

4model.add(tf.layers.dense({units:8, inputShape:2, activation: 'tanh'}))

5model.add(tf.layers.dense({units:1, activation: 'sigmoid'}))

6model.compile({optimizer: 'sgd', loss: 'binaryCrossentropy', lr:0.1})

7return model

8}

然后我們對(duì)模型進(jìn)行 5000 次迭代

1await model.fit(xs, ys, {

2batchSize: 1,

3epochs: 5000

4})

最后我們預(yù)測(cè)訓(xùn)練集

1model.predict(xs).print()

輸出預(yù)期應(yīng)該是 [[0.0064339], [0.9836861], [0.9835356], [0.0208658]]。

CNN 模型

TensorFlow.js 使用計(jì)算圖來(lái)自動(dòng)區(qū)分。我們只需要?jiǎng)?chuàng)建圖層,優(yōu)化器并編譯模型。讓我們創(chuàng)建一個(gè)順序模型:

1model = tf.sequential();

現(xiàn)在我們可以為模型添加不同的圖層。讓我們添加帶輸入的第一個(gè)卷積層 [28,28,1]

1const convlayer = tf.layers.conv2d({

2inputShape: [28,28,1],

3kernelSize: 5,

4filters: 8,

5strides: 1,

6activation: 'relu',

7kernelInitializer: 'VarianceScaling'

8});

在這里,我們創(chuàng)建了一個(gè) convlayer 接受輸入圖層為 [28,28,1]。輸入將是大小為 28 x 28 的灰色圖像。然后我們對(duì)其進(jìn)行初始化。之后,我們應(yīng)用一個(gè)激活函數(shù),它基本上取張量中的負(fù)值并用零替換它們?,F(xiàn)在我們可以將此 convlayer 添加到模型中:

1model.add(convlayer);

使用 Tensorflow.js 我們不需要為下一層指定輸入大小,因?yàn)樵诰幾g模型后它將自動(dòng)評(píng)估。我們還可以添加最大池,密集層等。這是一個(gè)簡(jiǎn)單的模型:

1const model = tf.sequential();

2

3//create the first layer

4model.add(tf.layers.conv2d({

5inputShape: [28, 28, 1],

6kernelSize: 5,

7filters: 8,

8strides: 1,

9activation: 'relu',

10kernelInitializer: 'VarianceScaling'

11}));

12

13//create a max pooling layer

14model.add(tf.layers.maxPooling2d({

15poolSize: [2, 2],

16strides: [2, 2]

17}));

18

19//create the second conv layer

20model.add(tf.layers.conv2d({

21kernelSize: 5,

22filters: 16,

23strides: 1,

24activation: 'relu',

25kernelInitializer: 'VarianceScaling'

26}));

27

28//create a max pooling layer

29model.add(tf.layers.maxPooling2d({

30poolSize: [2, 2],

31strides: [2, 2]

32}));

33

34//flatten the layers to use it for the dense layers

35model.add(tf.layers.flatten());

36

37 //dense layer with output 10 units

38model.add(tf.layers.dense({

39units: 10,

40kernelInitializer: 'VarianceScaling',

41activation: 'softmax'

42}));

為了檢查輸出張量,我們可以為任何層應(yīng)用張量。但是這里的輸入需要的是一個(gè)形狀為[BATCH_SIZE,28,28,1],其中BATCH_SIZE表示我們一次應(yīng)用于模型的數(shù)據(jù)集元素的數(shù)量。以下是如何評(píng)估卷積層的示例:

1const convlayer = tf.layers.conv2d({

2inputShape: [28, 28, 1],

3kernelSize: 5,

4filters: 8,

5strides: 1,

6activation: 'relu',

7kernelInitializer: 'VarianceScaling'

8});

9

10const input = tf.zeros([1,28,28,1]);

11const output = convlayer.apply(input);

在檢查 output 張量的形狀后,我們看到它的形狀為 [1,24,24,8]。使用公式評(píng)估:

1const outputSize = Math.floor((inputSize-kernelSize)/stride +1);

回到我們的模型,我們意識(shí)到我們使用的 flatten() 基本上將輸入從形狀 [BATCH_SIZE,a,b,c] 轉(zhuǎn)換為形狀 [BATCH_SIZE,axbxc]。這很重要,因?yàn)樵诿芗瘜又形覀儾荒軕?yīng)用 2d 數(shù)組。最后,我們使用了帶有輸出單元的密集層,10 代表了我們識(shí)別系統(tǒng)中所需的類(lèi)別。實(shí)際上,該模型用于識(shí)別所謂的 MNIST 數(shù)據(jù)集中的手寫(xiě)數(shù)字。

優(yōu)化和編譯

創(chuàng)建模型后,我們需要一種優(yōu)化參數(shù)的方法。像 SGD 和 Adam 優(yōu)化器都有不同的方法。如下所示創(chuàng)建優(yōu)化器:

1const LEARNING_RATE = 0.0001;

2const optimizer = tf.train.adam(LEARNING_RATE);

這將使用指定的學(xué)習(xí)速率創(chuàng)建 Adam 優(yōu)化器?,F(xiàn)在,我們已準(zhǔn)備好編譯模型

1model.compile({

2optimizer: optimizer,

3loss: 'categoricalCrossentropy',

4metrics: ['accuracy'],

5});

在這里,我們創(chuàng)建了使用 Adam 來(lái)優(yōu)化損失函數(shù)的模型,該函數(shù)評(píng)估預(yù)測(cè)輸出和真實(shí)標(biāo)簽的交叉熵。

訓(xùn)練

在編譯模型之后,我們準(zhǔn)備在數(shù)據(jù)集上訓(xùn)練模型。我們需要使用 fit() 函數(shù):

1const batch = tf.zeros([BATCH_SIZE,28,28,1]);

2const labels = tf.zeros([BATCH_SIZE, NUM_CLASSES]);

3

4const h = await model.fit(batch, labels,

5{

6batchSize: BATCH_SIZE,

7validationData: validationData,

8epochs: BATCH_EPOCHs

9});

10

請(qǐng)注意,我們正在為一組訓(xùn)練集提供 fit 函數(shù)。fit 函數(shù)的第二個(gè)變量表示模型的真實(shí)標(biāo)簽。最后,我們有配置參數(shù),如 batchSize 和 epochs。請(qǐng)注意,它 epochs 表示我們迭代當(dāng)前批次而不是整個(gè)數(shù)據(jù)集的次數(shù)。因此,我們可以將該代碼包裝在 for 循環(huán)中,該循環(huán)遍歷訓(xùn)練集的所有批次。

注意我們使用了特殊的關(guān)鍵字 await,它阻塞并等待函數(shù)執(zhí)行完成。這就像運(yùn)行另一個(gè)線程,主線程正在等待擬合函數(shù)完成執(zhí)行。

熱編碼

通常給定的標(biāo)簽是代表該類(lèi)的數(shù)字。例如,假設(shè)我們有兩個(gè)類(lèi),一個(gè)橙色類(lèi)和一個(gè)蘋(píng)果類(lèi)。然后我們將給出橙色類(lèi)標(biāo)簽 0 和蘋(píng)果類(lèi)標(biāo)簽 1。但是,我們的網(wǎng)絡(luò)接受一個(gè)大小為 [BATCH_SIZE,NUM_CLASSES] 的張量。因此,我們需要使用熱編碼:

1const output = tf.oneHot(tf.tensor1d([0,1,0]), 2);

2

3//the output will be [[1, 0],[0, 1],[1, 0]]

4

5

因此,我們將 1d 張量標(biāo)簽轉(zhuǎn)換為張量形狀[BATCH_SIZE,NUM_CLASSES]。

損失和準(zhǔn)確性

為了檢查我們模型的性能,我們需要知道損失和準(zhǔn)確性。為此,我們需要使用歷史模型獲取結(jié)果。

1//h is the output of the fitting module

2const loss = h.history.loss[0];

3const accuracy = h.history.acc[0];

請(qǐng)注意,我們正在評(píng)估 validationData 的損失性和準(zhǔn)確性。

預(yù)測(cè)

假設(shè)我們完成了對(duì)模型的訓(xùn)練,并且給出了良好的損失和準(zhǔn)確性。是時(shí)候預(yù)測(cè)看不見(jiàn)的數(shù)據(jù)元素的結(jié)果了。假設(shè)我們的瀏覽器中有一個(gè)圖像,或者我們直接從我們的網(wǎng)絡(luò)攝像頭拍攝,那么我們就可以使用我們訓(xùn)練有素的模型來(lái)預(yù)測(cè)它的類(lèi)。首先,我們需要將圖像轉(zhuǎn)換為張量

1//retrieve the canvas

2const canvas = document.getElementById("myCanvas");

3const ctx = canvas.getContext("2d");

4

5//get image data

6imageData = ctx.getImageData(0, 0, 28, 28);

7

8//convert to tensor

9const tensor = tf.fromPixels(imageData);

在這里我們創(chuàng)建了一個(gè) canvas 并從中獲取imageData,然后我們轉(zhuǎn)換為張量?,F(xiàn)在張量大小為 [28,28,3] 但模型采用 4 維向量。因此,利用 expandDims 我們可以為張量添加額外的維度。

1const eTensor = tensor.expandDims(0);

因此,輸出張量大小為 [1,28,28,3] 因?yàn)槲覀冊(cè)?a target="_blank">索引 0 處添加了維度?,F(xiàn)在我們使用 predict() 進(jìn)行預(yù)測(cè)。

1model.predict(eTensor);

函數(shù) predict 將返回我們最后一層的值。

轉(zhuǎn)移學(xué)習(xí)

在前面的部分中,我們必須從頭開(kāi)始訓(xùn)練我們的模型。然而,這是一項(xiàng)昂貴的操作,因?yàn)樗枰嗟挠?xùn)練迭代。因此,我們使用稱(chēng)為 mobilenet 的預(yù)訓(xùn)練模型。它是一款輕巧的 CNN,經(jīng)過(guò)優(yōu)化可在移動(dòng)應(yīng)用中運(yùn)行。Mobilenet 受過(guò) ImageNet 訓(xùn)練。

要加載模型,如下所示:

1const mobilenet = await tf.loadModel(

2 'https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_0.25_224/model.json');

我們可以使用輸入,輸出來(lái)檢查模型的結(jié)構(gòu):

1//The input size is [null, 224, 224, 3]

2const input_s = mobilenet.inputs[0].shape;

3

4//The output size is [null, 1000]

5const output_s = mobilenet.outputs[0].shape;

6

因此,我們需要大小為 [1,224,224,3] 的圖像,輸出將是一個(gè)大小為 [1,1000] 的張量,它保存 ImageNet 數(shù)據(jù)集中每個(gè)類(lèi)的概率。

為了簡(jiǎn)便起見(jiàn),我們將采取零值數(shù)組,并試圖預(yù)測(cè)出 1,000 種類(lèi)別。

1var pred = mobilenet.predict(tf.zeros([1, 224, 224, 3]));

2pred.argMax().print();

運(yùn)行代碼后,我得到 class = 21:

現(xiàn)在我們需要檢查模型的內(nèi)容。為此,我們可以獲得模型圖層和名稱(chēng):

1//The number of layers in the model '88'

2const len = mobilenet.layers.length;

3

4//this outputs the name of the 3rd layer 'conv1_relu'

5const name3 = mobilenet.layers[3].name;

當(dāng)基于另一個(gè)數(shù)據(jù)集再次訓(xùn)練具有 88 個(gè)圖層的模型時(shí),是非常昂貴的。因此,基本的技巧是使用這個(gè)模型來(lái)評(píng)估激活(我們不會(huì)重新訓(xùn)練)。

假設(shè)我們需要一個(gè)模型來(lái)區(qū)分胡蘿卜和黃瓜。我們將使用 mobilene tmodel 來(lái)計(jì)算我們選擇的某個(gè)層的激活。然后我們使用具有輸出大小為 2 的密集層來(lái)預(yù)測(cè)正確的類(lèi)。因此,我們只需要訓(xùn)練密集層。

首先,我們需要擺脫模型的密集層。

1const layer = mobilenet.getLayer('conv_pw_13_relu');

現(xiàn)在讓我們更新我們的模型,讓這個(gè)圖層成為一個(gè)輸出

1mobilenet = tf.model({inputs: mobilenet.inputs, outputs: layer.output});

最后,我們創(chuàng)建了可訓(xùn)練模型,但我們需要知道最后一層輸出形狀:

1//this outputs a layer of size [null, 7, 7, 256]

2const layerOutput = layer.output.shape;

我們看到形狀為 [null,7,7,256],現(xiàn)在我們可以將它輸入到我們的密集層:

1trainableModel = tf.sequential({

2layers: [

3tf.layers.flatten({inputShape: [7, 7, 256]}),

4tf.layers.dense({

5units: 100,

6activation: 'relu',

7kernelInitializer: 'varianceScaling',

8useBias: true

9}),

10tf.layers.dense({

11units: 2,

12kernelInitializer: 'varianceScaling',

13useBias: false,

14activation: 'softmax'

15})

16]

17});

如您所見(jiàn),我們創(chuàng)建了一個(gè)帶有 100 個(gè)神經(jīng)元的密集層和帶有大小為 2 的輸出層。

1const activation = mobilenet.predict(input);

2const predictions = trainableModel.predict(activation);

我們可以使用前面的部分來(lái)使用某個(gè)優(yōu)化器訓(xùn)練模型。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴

原文標(biāo)題:TensorFlow.js 入門(mén)指南

文章出處:【微信號(hào):tensorflowers,微信公眾號(hào):Tensorflowers】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何使用TensorFlow構(gòu)建機(jī)器學(xué)習(xí)模型

    在這篇文章中,我將逐步講解如何使用 TensorFlow 創(chuàng)建個(gè)簡(jiǎn)單的機(jī)器學(xué)習(xí)模型。
    的頭像 發(fā)表于 01-08 09:25 ?997次閱讀
    如何使用<b class='flag-5'>TensorFlow</b><b class='flag-5'>構(gòu)建</b>機(jī)器學(xué)習(xí)<b class='flag-5'>模型</b>

    使用 TensorFlow, 你必須明白 TensorFlow

    , 通常在構(gòu)建階段創(chuàng)建個(gè)圖來(lái)表示和訓(xùn)練神經(jīng)網(wǎng)絡(luò), 然后在執(zhí)行階段反復(fù)執(zhí)行圖中的訓(xùn)練 op.TensorFlow 支持 C, C++, Python 編程語(yǔ)言. 目前,
    發(fā)表于 03-30 20:03

    高階API構(gòu)建模型和數(shù)據(jù)集使用

    TensorFlow2.0Beta版本,同pytorch樣支持動(dòng)態(tài)執(zhí)行(TensorFlow2.0默認(rèn)eager模式,無(wú)需啟動(dòng)會(huì)話(huà)執(zhí)行計(jì)算圖),同時(shí)刪除了雜亂低階API,使用高階API簡(jiǎn)單地
    發(fā)表于 11-04 07:49

    CAM 350一些基本操作

    CAM 350一些基本操作 G
    發(fā)表于 01-25 11:26 ?2235次閱讀

    TensorFlow發(fā)表推文正式發(fā)布TensorFlow v1.9

    其中有兩個(gè)案例受到了大家的廣泛關(guān)注,這個(gè)項(xiàng)目是通過(guò) Colab 在 tf.keras 中訓(xùn)練模型,并通過(guò)TensorFlow.js 在瀏覽器中運(yùn)行;最近在 JS 社區(qū)中,對(duì)這些相關(guān)項(xiàng)目的高度需求
    的頭像 發(fā)表于 07-16 10:23 ?3116次閱讀

    利用TensorFlow.js,D3.js 和 Web 的力量使訓(xùn)練模型的過(guò)程可視化

    TensorFlow.js 將機(jī)器學(xué)習(xí)引入 JavaScript 和 Web。 我們將利用這個(gè)很棒的框架來(lái)構(gòu)建個(gè)深度神經(jīng)網(wǎng)絡(luò)模型。這個(gè)模型
    的頭像 發(fā)表于 08-08 14:24 ?6996次閱讀

    如何使用TensorFlow.js構(gòu)建系統(tǒng)

    TensorFlow.js團(tuán)隊(duì)直在進(jìn)行有趣的基于瀏覽器的實(shí)驗(yàn),以使人們熟悉機(jī)器學(xué)習(xí)的概念,并鼓勵(lì)他們將其用作您自己項(xiàng)目的構(gòu)建。對(duì)于那些不熟悉的人來(lái)說(shuō),
    的頭像 發(fā)表于 08-19 08:55 ?3564次閱讀

    基于tensorflow.js設(shè)計(jì)、訓(xùn)練面向web的神經(jīng)網(wǎng)絡(luò)模型的經(jīng)驗(yàn)

    NVIDIA顯卡。tensorflow.js在底層使用了WebGL加速,所以在瀏覽器中訓(xùn)練模型個(gè)好處是可以利用AMD顯卡。另外,在瀏覽器中訓(xùn)練模型,可以更好地保護(hù)用戶(hù)隱私,更容易讓
    的頭像 發(fā)表于 10-18 09:43 ?4110次閱讀

    Shadow Art: 頌揚(yáng)中國(guó)皮影戲藝術(shù)的 AI 實(shí)驗(yàn)

    在本文中,我們將探討我們?nèi)绾卫?TensorFlow.js 構(gòu)建 Shadow Art。
    的頭像 發(fā)表于 03-15 16:21 ?5519次閱讀

    Google LLC開(kāi)源TensorFlow Quantum

    這就是TensorFlow Quantum出現(xiàn)的地方。它提供了組運(yùn)算符,低級(jí)編程構(gòu)造,用于創(chuàng)建可與qubit,量子邏輯門(mén)和量子電路配合使用的AI
    的頭像 發(fā)表于 03-22 15:13 ?3272次閱讀

    TensorFlow.js制作了個(gè)僅用 200 余行代碼的項(xiàng)目

    我們先來(lái)看下運(yùn)行的效果。下圖中,上半部分是原始視頻,下半部分是使用 TensorFlow.js 對(duì)人像進(jìn)行消除后的視頻。可以看到,除了偶爾會(huì)在邊緣處留有殘影之外,整體效果還是很不錯(cuò)的。
    的頭像 發(fā)表于 05-11 18:08 ?5596次閱讀

    Danfo.js提供高性能、直觀易用的數(shù)據(jù)結(jié)構(gòu),支持結(jié)構(gòu)化數(shù)據(jù)的操作和處理

    我們的愿景致,本質(zhì)上也符合 TensorFlow.js 團(tuán)隊(duì)向 Web 引入 ML 的目標(biāo)。Numpy 和 Pandas 等開(kāi)源庫(kù)全面革新了 Python 中數(shù)據(jù)操作的便利性。因此很多工具都圍繞它們構(gòu)
    的頭像 發(fā)表于 09-23 18:21 ?5301次閱讀

    如何基于 ES6 的 JavaScript 進(jìn)行 TensorFlow.js 的開(kāi)發(fā)

    從頭開(kāi)發(fā)、訓(xùn)練和部署模型,也可以用來(lái)運(yùn)行已有的 Python 版 TensorFlow 模型,或者基于現(xiàn)有的模型進(jìn)行繼續(xù)訓(xùn)練。 TensorFlo
    的頭像 發(fā)表于 10-31 11:16 ?3125次閱讀

    TensorFlow主題演講中涉及的一些更新總結(jié)

    Google 開(kāi)發(fā)者?Youku?頻道上找到所有主題演講的視頻。以下是按產(chǎn)品領(lǐng)域列出的一些更新摘要(視頻中還有更多產(chǎn)品更新要點(diǎn),請(qǐng)務(wù)必查看)。 移動(dòng)版和網(wǎng)站版 TensorFlow
    的頭像 發(fā)表于 05-28 14:19 ?1869次閱讀

    keras模型轉(zhuǎn)tensorflow session

    在這篇文章中,我們將討論如何將Keras模型轉(zhuǎn)換為TensorFlow session。 Keras和TensorFlow簡(jiǎn)介 Keras是個(gè)高級(jí)神經(jīng)網(wǎng)絡(luò)API,它提供了
    的頭像 發(fā)表于 07-05 09:36 ?551次閱讀