Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
TensorFlow.js¡¢Ç¨ÒÆÑ§Ï°ÓëAI²úÆ·´´ÐÂÖ®µÀ
 
  8947  次浏览      31
 2018-5-11 
 
±à¼­ÍƼö:

±¾ÎÄÀ´×ÔÓÚÍøÂ磬ȫÎÄ´Ó¼¼ÊõÁĵ½²úÆ·µÄÍæ·¨£¬Éè¼ÆÊ¦£¯²úÆ·¾­ÀíÖ»Óж®µÃ¼¼ÊõµÄÐÂÌØÐÔ£¬²ÅÄÜΪ²úÆ·ÈÚÈëеÄÍæ·¨¡£

1 ¸ÅÄîÆª

1.1 tensors

TensorFlow.js °Ñ N άÊý×鶼ͳ³ÆÎª tensor £¬Îª·½±ãÀí½â£¬¼ûÏÂͼ¡£

¶¯ÊÖʵ¼ùÏ´úÂ룺

var shape=[2,3];

var a=tf.tensor([1,2,3,4,4,5],shape);

a.print()

Ò²¿ÉÒÔ¸ÄдΪ£º

var a=tf.tensor([[1,2,3],[4,4,5]]);

a.print()

»¹¿ÉÒÔд³É tf.scalar£¬ tf.tensor1d £¬ tf.tensor2d £¬ tf.tensor3d ºÍ tf.tensor4d£¬ÒÔÌá¸ß´úÂëµÄ¿É¶ÁÐÔ¡£

var a=tf.scalar(4);

a.print();

var b=tf.tensor1d([0,2,3,4]);

b.print();

var c=tf.tensor2d([[0,3],[4,5]]);

c.print();

TensorFlow.js»¹ÌṩÁËÖ±½Ó´´½¨ËùÓÐֵΪ0»òÕß1µÄÕÅÁ¿£¨ tensor £©£¬ÊµÑéÏ£º

tf.zeros([10]).print();
tf.zeros([2,8]).print();
tf.zeros([2,2,3]).print();
tf.ones([10]).print();
tf.ones([2,8]).print();
tf.ones([2,2,3]).print();

1.2 Variables

Tensors ÊDz»¿É±äµÄ£¬Ò»µ©´´½¨£¬²»ÄܸıäÆäÖµ£»¶ø variables Ôò¿ÉÒÔ¶¯Ì¬¸Ä±äÆäÖµ£¬Ö÷ÒªÓÃÓÚÔÚÄ£ÐÍѵÁ·ÆÚ¼ä´æ´¢ºÍ¸üÐÂÖµ¡£

var initalValues=tf.ones([8]);

initalValues.print();

//biases±äÁ¿£¬Í¨¹ýassign·½·¨¸üÐÂÆäÖµ

var biases=tf.variable(initalValues);

biases.print();

var updatedValues=tf.tensor1d([0,1,2,3,4,5,6,7]);

updatedValues.print();

biases.assign(updatedValues);

biases.print();

1.3 Operations ( Ops )

һЩÊýѧµÄÔËË㣬¾ØÕó±ä»»£¬¾í»ý²Ù×÷£¬Âß¼­²Ù×÷µÈ¡£¹Ù·½ api ÎĵµºÜÆëÈ«£¬Ð´µÃºÜÇå³þ£¨ https://js.tensorflow.org/api/0.6.1/ £©£¬ÏÂÃæÁ·Ï°Ï square ºÍ add £º

//square

var d=tf.tensor2d([[1,2,3],[4,5,6]]);

d.print();

var d_squared=d.square();

d_squared.print();

//add

var a=tf.tensor2d([[1,2,3],[4,5,6]]);

var b=tf.tensor2d([[3,1,9],[14,25,16]]);

a.print();
b.print();

var c=a.add(b);

c.print();

d.add(b).square().print();

1.4 Models and Layers

Models Ï൱ÓÚ JS º¯ÊýµÄ¸ÅÄ¸ø¶¨Ò»Ð©ÊäÈ룬ʹÓà Ops À´±íʾģÐÍËù×öµÄ¹¤×÷£¬²úÉúһЩÆÚÍûµÄÊä³ö¡£ TensorFLow.js ÓÐ 2 ÖÖ´´½¨Ä£Ð͵ķ½·¨¡£

// ¶¨ÒåÒ»¸ö predict º¯Êý

function predict(input) {

// ʵÏÖÒ»¸öÊýѧº¯ÊýµÄ¼ÆËã y = a * x ^ 2 + b * x + c

return tf.tidy(() => {

const x = tf.scalar(input);

const ax2 = a.mul(x.square());

const bx = b.mul(x);

const y = ax2.add(bx).add(c);

return y;
});
}

// ¶¨Òå³£Á¿

var a = tf.scalar(2),
b = tf.scalar(4),
c = tf.scalar(8);

// ²âÊÔÏ predict º¯Êý

predict(1999993).print();

ÓÉÓÚ TensorFlow.js ÊÇʹÓà GPU À´ÔËËãµÄ£¬ËùÒÔÐèÒª¹ÜÀí GPU µÄÄڴ棬µ±Ê¹Óà tensors ºÍ variables ʱ¡£ÆäÖУ¬ tf.tidy µÄ·½·¨ÓÐÖúÓÚ±ÜÃâÄÚ´æÐ¹Â©£¨±ÜÃâ³ÌÐò±ÀÀ££©£¬ÊÔÏ tidy £º

// y = 3 ^ 2 + 1

var y = tf.tidy(() => {

// a, b, ÒÔ¼° one ½«»á±»Çå¿Õµ± tidy ½áÊøÊ±¡£


const one = tf.scalar(1);

const a = tf.scalar(3);


const b = a.square();



console.log('tensors µÄÊýÁ¿ (in tidy): ' + tf.memory().numTensors);




return b.add(one);
});

console.log('tensors µÄÊýÁ¿ (outside tidy): ' + tf.memory().numTensors);


y.print();

³ýÁË tidy Í⣬»¹ÓÐ dispose ¿ÉÒÔÓÃÀ´ÊÖ¶¯¹ÜÀí GPU ÄÚ´æ¡£ÊÔÑéÏ£º

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

const x_squared=x.square();

x.print();

x_squared.print();

console.log(tf.memory().numTensors);

x.dispose();

console.log(tf.memory().numTensors);

x_squared.dispose();

console.log(tf.memory().numTensors);

tensorFlow.js »¹ÄÚÖÃÁËһЩ model µÄ³éÏ󣬿ÉÒÔʹÓà tf.model À´¹¹ÔìÒ»¸ö²»º¬ layer µÄÄ£ÐÍ¡£ tf °üº¬µÄ layer ÓÐ tf.layers.simpleRNN £¬ tf.layers.gru ºÍ tf.layers.lstm µÈ¡£ÕâÀïµÃͨ¹ý¼¸¸öСÐÍÏîÄ¿À´Êµ¼ùÁË¡£

2 ¹Ù·½Ê¾Àý

ÎÒÃÇ¿ÉÒÔÏÂÔØ¹Ù·½Ê¾Àý£¬ÔÚ±¾µØÔËÐв鿴Ч¹û¡£¹Ù·½ tensorFlow.js ÏîÄ¿£¬Ê¹Óà yarn ×÷Ϊ°ü¹ÜÀí¹¤¾ß£¬Ê¹Óà Parcel ×÷Ϊ Web Ó¦ÓõĴò°ü¹¤¾ß¡£

http://www.parceljs.io

ÈçºÎʹÓùٷ½Ê¾Àý£¬Ö»Òª½âѹºó£¬½øÈëÏîĿĿ¼£¬ÖÕ¶ËÊäÈë yarn £¬°²×°ÍêÒÀÀµ°üºóÔÙÊäÈë yarn watch ¼´¿ÉÔËÐÐÏîÄ¿¡£

¹ÙÍøÓм¸¸öʾÀý£¬µÚÒ»¸ö¼òµ¥µÄÊÇ´ÓÍ·¿ªÊ¼¹¹½¨Ò»¸öСÐ͵ÄÄ£ÐÍ£¬ÓÃÓÚÄâºÏÇúÏß¡£µÚ¶þ¸öʾ·¶ÁË CNN ʶ±ðÊÖдÊý×Ö¡£µÚÈý¸öʹÓÃÁËÇ¨ÒÆÑ§Ï°£¬ÑµÁ·Ò»¸öÉñ¾­ÍøÂçÀ´Ô¤²âÉãÏñÍ·µÄÊý¾Ý¡£µÚËĸö½éÉÜÈçºÎ½« Keras »ò TensorFlow ѵÁ·ºÃµÄÄ£Ð͵¼Èë TensorFlow.js À´Ê¹Óá£ÓÐÐËȤ¿ÉÒÔÏêϸѧϰÏ¡£

3 webcam-transfer-learning

ÆäÖйٷ½µÄÓÎϷʾÀý webcam-transfer-learning £¬½¨ÒéÍæÒ»Íæ£¬ÊÇ»ùÓÚ MobileNet µÄÒ»¸öÇ¨ÒÆÑ§Ï°µÄÀý×Ó¡£

3.1 MobileNet

MobileNets:
Efficient Convolutional Neural Networks for Mobile Vision Applications

ÕâÊǹȸèµÄһƪÂÛÎÄÌá³öµÄ£¬¿ÉÒÔ¼«´óµÄѹËõÄ£ÐÍÎļþ´óС£¬·Ç³£ÊʺÏÒÆ¶¯¶ËʹÓᣱ¾ÎÄʹÓà Keras ԤѵÁ·µÄͼÏñ·ÖÀàÄ£ÐÍ MobileNet_25_224 ¡£Í¨¹ý¼ÓÔØÑµÁ·ºÃµÄ keras Ä£ÐÍ£¬¿ÉÒÔÖ±½ÓÔÚä¯ÀÀÆ÷ʹÓûòÔÙ´ÎÔÚä¯ÀÀÆ÷ÖÐʹÓÃÇ¨ÒÆÑ§Ï°£¬ÑµÁ·ÐµÄÄ£ÐÍ¡£

ÏÈÏÂÔØÑµÁ·ºÃµÄÄ£ÐÍ£º

https://github.com/fchollet/deep-learning-models/releases/download/v0.6/mobilenet_2_5_224_tf.h5

È»ºóÖÕ¶ËÔËÐУº

pip install tensorflowjs

È»ºóÔËÐУº

tensorflowjs_converter --input_format keras mobilenet_2_5_224_tf.h5 model

ת³É tensorFlow.js ¿Éµ÷ÓÃµÄ model ºó£¬ÎÒÃÇÐèÒª°Ñ model ·ÅÖÃÔÚÒ»¸ö·þÎñÆ÷ÉÏ£¬²¢ÉèÖÃÔÊÐí¿çÓòÇëÇó£¬Õâ±ß¿ÉÒÔʹÓÃÒ»¸ö nodejs µÄ¿â£º

npm install http-server -g

½øÈëmodelÎļþ¼ÐÄÚÔËÐУº

http-server -p 3000 --cors

¼ÓÔØ model ¿ÉÒÔʹÓãº

const model = await tf.loadModel(¡®https://localhost:3000/model.json');

¹Ù·½Ò²ºÜÌùÐĵİÑÄ£Ðͷŵ½ https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_0.25_224/model.json ¹©µ÷ÓÃÁË¡£

ÕâÀïÎÒ²âÊÔÁËÏ MobileNet µÄЧ¹û£º

3.2 Transfer Learning

webcam-transfer-learning ÊÇÒ»¸öͼÏñ·ÖÀàÎÊÌ⣬½«ÉãÏñÍ·ÅÄÉãµÄÕÕÆ¬ÓëÉÏÏÂ×óÓҵ͝×÷×ö¹ØÁª¡£Ö÷ÒªÊÇѵÁ·Êý¾ÝÊÕ¼¯£ºÉãÏñÍ·ÅÄÉ㣬ÿÕÅͼƬ¹éÒ»»¯´¦Àí³É shape Ϊ [1,244,244,3] µÄÕÅÁ¿£¬×÷ΪѵÁ·Êý¾Ý£»Îª´Ë tensorFlow.js ÌØµØ·â×°Á˵÷Óà webcam µÄÏà¹Ø·½·¨£¬ÒÔ·½±ãÖ±½Ó¶Ô½Óµ½ tensorFLow.js ÖÐʹÓᣲ¢Ê¹Óà Transfer Learning Ç¨ÒÆÑ§Ï°À´¼õÉÙѵÁ·Êý¾ÝµÄÁ¿£¬´ïµ½·ÖÀàµÄÄ¿µÄ¡£

3.2.1 Ô¤´¦Àí

¼ÓÔØÔ¤ÑµÁ·Ä£ÐÍ MoblieNet £¬²¢½ØÈ¡ºÏÊʵIJã×÷ΪÊä³ö¡£ÉÏÎÄÒѾ­½éÉܹýÈçºÎ°Ñ keras ѵÁ·µÄÄ£ÐÍת³É tensorFlow.js µÄÄ£Ð͸ñʽÁË£¬ÕâÀïÎÒÃÇÖ±½Ó´Ó¹È¸èÌṩµÄÄ£ÐÍ·þÎñÖлñÈ¡¡£

´úÂ룺

async function loadMobilenet() {

const mobilenet = await tf.loadModel(
'https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_0.25_224/model.json');

console.log(mobilenet.layers)

const layer = mobilenet.getLayer(¡®conv_pw_13_relu');


console.log(layer.output.shape)

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


}

ͨ¹ýµ÷Óà getLayer(¡®conv_pw_13_relu¡¯) £¬ÎÒÃǽøÈëÁËԤѵÁ·µÄ MobileNet Ä£Ð͵ÄÄÚ²¿²ã£¬²¢¹¹½¨ÁËÒ»¸öеÄÄ£ÐÍ£¬ÆäÖÐÊäÈëÊÇÓë MobileNet ÏàͬµÄÊäÈ룬µ«Êä³öµÄÊÇ MobileNet Öмä²ãÃûΪ conv_pw_13_relu µÄ²ã¡£ÎÒÃÇÆ¾¾­ÑéÑ¡ÔñÁËÕâÒ»²ã£¨ Ëü¶ÔÎÒÃǵÄÈÎÎñºÜÓÐЧ £©¡£Ò»°ãÀ´Ëµ£¬½Ó½üԤѵÁ·Ä£ÐͽáÊøµÄ²ã½«ÔÚ´«ÊäѧϰÈÎÎñÖбíÏÖ¸üºÃ£¬ÒòΪËü°üº¬ÊäÈëµÄ¸ü¸ß¼¶ÓïÒåÌØÕ÷¡£³¢ÊÔÑ¡ÔñÁíÒ»¸öͼ²ã£¬¿´¿´ËüÊÇÈçºÎÓ°ÏìÄ£ÐÍÖÊÁ¿µÄ£¡¿ÉÒÔʹÓà model.layers ´òÓ¡Ä£Ð͵Äͼ²ã²é¿´¡£

ÔÚ´úÂëÖмÓÈ룺

console.log(layer.output.shape)

´òÓ¡³öÀ´ÊÇ [ null , 7 , 7 , 256 ] £¬Ã¿´ÎÓû§ÅÄÉãÕÕÆ¬£¬¶¼»áÂíÉϵ÷Óà MobileNet Êä³ö conv_pw_13_relu ²ã£¬×÷Ϊ Model µÄÊäÈëÊý¾Ý£¨ÉÏͼµÄºìÉ«¿ò£©¡£

3.2.2 Ç¨ÒÆÑ§Ï°

ÎÒÃǽ«°Ñ MobileNet µÄÕâÒ»²ãÊä³ö×÷ΪÎÒÃÇд´½¨µÄÄ£Ð͵ÄÊäÈ룬д´½¨µÄÄ£ÐÍÊä³öΪ 4 ¸öÀà±ðµÄÔ¤²â¡££¨ÉÏͼµÄºìÉ«¿ò£©

model = tf.sequential({

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

tf.layers.dense({
units: ui.getDenseUnits(),
activation: 'relu',
kernelInitializer: 'varianceScaling',
useBias: true
}),


tf.layers.dense({
units: NUM_CLASSES,
kernelInitializer: 'varianceScaling',
useBias: false,
activation: 'softmax'
})



]
});

´´½¨2¸öÈ«Á¬½Ó²ãµÄÄ£ÐÍ£¬¶ÀÁ¢ÓÚ mobilenet Ä£ÐÍ¡£¸ù¾ÝÓû§ÅÄÉãµÄ4¸öͼƬ£¬ÑµÁ·´ËÐÂÄ£ÐÍ¡£

ÕâÀïʹÓÃÁË tf.layers.flatten ¡£¹ØÓÚ tf.layers.flatten µÄʹÓ㬿ÉÒÔʵ¼ùÏ£º

model=tf.sequential();

model.add(tf.layers.flatten({inputShape:[12,4]}));

nn=model.predict(tf.ones([99,12,4]));

console.log(nn.shape);

nn.print()

ÊäÈëÊÇÒ»¸öshape Ϊ[99,12,4]µÄÈýάÕÅÁ¿£¬×îºóÊä³öµÄÊÇÒ»¸öshape Ϊ [99, 48] µÄ¶þάÕÅÁ¿£¬flatten °Ñ [12 , 4] £¬Ñ¹ËõΪ [ 12X4 ] ¡£

4 »ùÓÚÓû§¸öÐÔ»¯Êý¾ÝµÄ²úÆ·

webcam-transfer-learning ÓÎÏ·¸øÎÒÃÇÌṩÁËÒ»¸ö»ùÓÚÓû§¸öÐÔ»¯Êý¾ÝµÄÍæ·¨¡£Óû§¿ÉÒԷdz£µÍ³É±¾µÄѵÁ·ÊôÓÚ×Ô¼ºµÄͼÏñ·ÖÀàÄ£ÐÍ£¬ÓÃÓÚ¸÷ÖÖ·ÖÀàÎÊÌâ¡£ÎÒÃÇ¿ÉÒÔÍØÕ¹Ï£¬±ÈÈçʶ±ðÓû§µÄÊÖÊÆ¶¯×÷£¬À´¿ØÖÆÓÎÏ·ÖеÄÈËÎʶ±ðÓû§µÄ±íÇ飬¿ØÖÆ3dÈËÎïµÄ±íÇ飻ʶ±ðͼÏñÖеÄÈËÁ³ÊýÁ¿£¬×Ô¶¯Òþ²ØËùä¯ÀÀµÄÄÚÈÝ£¬·ÀÖ¹±»¿úÊÓ¡­¡­ÉõÖÁ autodraw ¡¢ui2code ¡¢ÊÖд×Öʶ±ðµÈÕâЩӦÓö¼¿ÉÒÔ³¢ÊÔÈÚÈëÓû§¸öÐÔ»¯µÄÊý¾ÝÔÙѵÁ·µÄÍæ·¨£¬¸øÓèÓû§ÕÆ¿ØÈ¨¡£

ÎÒÈÏΪм¼Êõ¶¼»áÓÐÒ»ÖÖºÜ×ÔÈ»µÄеĽ»»¥·½Ê½Óë֮ƥÅä¡£»ùÓÚä¯ÀÀÆ÷µÄÓû§¸öÐÔ»¯Êý¾ÝÔÙѵÁ·£¬¿ÉÒÔÌáÁ¶³öÒÔÏ»ù±¾µÄ½»»¥Á÷³Ì£º

É趨Àà±ð

¡ª> ²É¼¯Êý¾Ý

¡ª> ¿ªÊ¼ÑµÁ·

¡ª> ʹÓÃÓû§Êý¾Ý

¡ª> ºËÐŦÄÜ

¡ª> Íê³ÉÈÎÎñ£¯µÃµ½Ä³¸ö½á¹û¡£

Óû§Ê¹ÓÃ×Ô¼ºµÄÊý¾Ý£¬Ó¦Óøü·ûºÏÓû§¸öÐÔ»¯ÌØÕ÷£¬ÊÇÒ»ÖÖ²»Í¬ÓÚ¸öÐÔ»¯ÍƼöµÄ¡°¸öÐÔ»¯¡±²úÆ·Éè¼Æ·½·¨¡£

   
8947 ´Îä¯ÀÀ       31
Ïà¹ØÎÄÕÂ

»ùÓÚͼ¾í»ýÍøÂçµÄͼÉî¶Èѧϰ
×Ô¶¯¼ÝÊ»ÖеÄ3DÄ¿±ê¼ì²â
¹¤Òµ»úÆ÷ÈË¿ØÖÆÏµÍ³¼Ü¹¹½éÉÜ
ÏîĿʵս£ºÈçºÎ¹¹½¨ÖªÊ¶Í¼Æ×
 
Ïà¹ØÎĵµ

5GÈ˹¤ÖÇÄÜÎïÁªÍøµÄµäÐÍÓ¦ÓÃ
Éî¶ÈѧϰÔÚ×Ô¶¯¼ÝÊ»ÖеÄÓ¦ÓÃ
ͼÉñ¾­ÍøÂçÔÚ½»²æÑ§¿ÆÁìÓòµÄÓ¦ÓÃÑо¿
ÎÞÈË»úϵͳԭÀí
Ïà¹Ø¿Î³Ì

È˹¤ÖÇÄÜ¡¢»úÆ÷ѧϰ&TensorFlow
»úÆ÷ÈËÈí¼þ¿ª·¢¼¼Êõ
È˹¤ÖÇÄÜ£¬»úÆ÷ѧϰºÍÉî¶Èѧϰ
ͼÏñ´¦ÀíËã·¨·½·¨Óëʵ¼ù