成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

好球還是壞球(棒球中術(shù)語),用tensorflow.js預(yù)測一下?

chinafgj / 2413人閱讀

摘要:感謝像這樣的框架,使得這些數(shù)據(jù)集可以應(yīng)用于機器學(xué)習(xí)領(lǐng)域。藍點被標(biāo)記為壞球,橙點被標(biāo)記為好球標(biāo)注來自大聯(lián)盟裁判員使用構(gòu)建模型將機器學(xué)習(xí)帶入和領(lǐng)域。使用庫將預(yù)測結(jié)果呈現(xiàn)為熱圖。好球區(qū)域位于本壘板上方至英尺之間。

在這篇文章中,我們將使用TensorFlow.js,D3.js和網(wǎng)絡(luò)的力量來可視化訓(xùn)練模型的過程,以預(yù)測棒球數(shù)據(jù)中的壞球(藍色區(qū)域)和好球(橙色區(qū)域)。在整個訓(xùn)練過程中,我們將一步一步的將模型預(yù)測出的好球區(qū)域動態(tài)的展示出來。您可以通過訪問Observable notebook網(wǎng)站在瀏覽器中運行此模型。

體育方面的高級指標(biāo)

如今的職業(yè)體育環(huán)境里充滿了大量的數(shù)據(jù)。這些數(shù)據(jù)被團隊、業(yè)余愛好者和粉絲應(yīng)用于各種案例。感謝像TensorFlow這樣的框架,使得這些數(shù)據(jù)集可以應(yīng)用于機器學(xué)習(xí)領(lǐng)域。

美國職業(yè)棒球大聯(lián)盟高級媒體(MLBAM)發(fā)布了一個可供公眾研究的大型數(shù)據(jù)集。該數(shù)據(jù)集包含有關(guān)過去幾年在MLB游戲中投擲的投球的傳感器信息。從這個數(shù)據(jù)集中挑選了一個包含5000個樣本(2,500個壞球和2,500個好球)的訓(xùn)練集用于此處實驗。

以下是訓(xùn)練數(shù)據(jù)的具體數(shù)據(jù)格式示例:

以下是繪制好球區(qū)域時的訓(xùn)練數(shù)據(jù)分布。藍點被標(biāo)記為壞球,橙點被標(biāo)記為好球(標(biāo)注來自大聯(lián)盟裁判員)

使用TensorFlow.js構(gòu)建模型

TensorFlow.js將機器學(xué)習(xí)帶入JavaScript和Web領(lǐng)域。我們將使用這個優(yōu)秀的框架來構(gòu)建一個深度神經(jīng)網(wǎng)絡(luò)模型。這個模型將能夠以大聯(lián)盟裁判的精確度來區(qū)分好球和壞球。

該模型從PITCHf/x中選出以下評測指標(biāo)進行訓(xùn)練:

協(xié)調(diào)球越過本壘的位置("px"和"pz")

擊球手站在球場的哪一側(cè)

擊球區(qū)(擊球手的軀干)的高度,以英尺為單位。

擊球區(qū)底部的高度(擊球手的膝蓋)以英尺為單位

該次擊球是好球還是壞球(由裁判員判定的)

結(jié)構(gòu)

我們將使用TensorFlow.js的Layers API定義此模型。Layers API基于Keras,對以前使用過Keras框架的人來說應(yīng)該很熟悉:

const model = tf.sequential();

// Two fully connected layers with dropout between each:
model.add(tf.layers.dense({units: 24, activation: "relu", inputShape: [5]}));
model.add(tf.layers.dropout({rate: 0.01}));
model.add(tf.layers.dense({units: 16, activation: "relu"}));
model.add(tf.layers.dropout({rate: 0.01}));

// Only two classes: "strike" and "ball":
model.add(tf.layers.dense({units: 2, activation: "softmax"}));

model.compile({
  optimizer: tf.train.adam(0.01),
  loss: "categoricalCrossentropy",
  metrics: ["accuracy"]
});
加載和準備數(shù)據(jù)

精選的訓(xùn)練集可以在GitHub gist獲取。該數(shù)據(jù)集是CSV格式的,需要下載下來在本地轉(zhuǎn)換成符合TensorFlow.js的格式。

const data = [];
csvData.forEach((values) => {
  // "logit" data uses the 5 fields:
  const x = [];
  x.push(parseFloat(values.px));
  x.push(parseFloat(values.pz));
  x.push(parseFloat(values.sz_top));
  x.push(parseFloat(values.sz_bot));
  x.push(parseFloat(values.left_handed_batter));
  // The label is simply "is strike" or "is ball":
  const y = parseInt(values.is_strike, 10);
  data.push({x: x, y: y});
});
// Shuffle the contents to ensure the model does not always train on the same
// sequence of pitch data:
tf.util.shuffle(data);

解析CSV數(shù)據(jù)后,需要將JS類型轉(zhuǎn)換為Tensor batches才能進行訓(xùn)練和評估。有關(guān)此過程的詳細信息,請參閱code lab。TensorFlow.js團隊正在開發(fā)一種新的數(shù)據(jù)API接口,以便使數(shù)據(jù)獲取在將來變得更容易。

訓(xùn)練模型

讓我們把前期的準備都綜合起來吧。定義好了模型,準備好了訓(xùn)練數(shù)據(jù),現(xiàn)在我們將要開始訓(xùn)練了。以下的異步方法訓(xùn)練了一批訓(xùn)練樣本并更新熱圖:

// Trains and reports loss+accuracy for one batch of training data:
async function trainBatch(index) {
  const history = await model.fit(batches[index].x, batches[index].y, {
    epochs: 1,
    shuffle: false,
    validationData: [batches[index].x, batches[index].y],
    batchSize: CONSTANTS.BATCH_SIZE
  });

  // Don"t block the UI frame by using tf.nextFrame()
  await tf.nextFrame();
  updateHeatmap();
  await tf.nextFrame();
}
可視化模型的準確度

使用來自均勻放置在本壘板上方的 4英尺x4英尺 柵格的預(yù)測矩陣來構(gòu)建熱圖。在每個訓(xùn)練步驟之后將該矩陣傳遞到模型中以檢查模型的準確度。使用D3庫將預(yù)測結(jié)果呈現(xiàn)為熱圖。

建立預(yù)測矩陣

熱圖中所使用的預(yù)測矩陣從本壘板的中間開始,向左和向右各延伸2英尺寬,高度從本壘板的底部到4英尺高。好球區(qū)域位于本壘板上方1.5至3.5英尺之間。下圖在二維平面上呈現(xiàn)出各個矩陣之間的關(guān)系:

將預(yù)測矩陣與模型一起使用

當(dāng)每個批次的訓(xùn)練數(shù)據(jù)都在模型中訓(xùn)練之后,我們將預(yù)測矩陣傳遞到模型中,這樣就可以去預(yù)測好球和壞球了。

function predictZone() {
  const predictions = model.predictOnBatch(predictionMatrix.data);
  const values = predictions.dataSync();

  // Sort each value so the higher prediction is the first element in the array:
  const results = [];
  let index = 0;
  for (let i = 0; i < values.length; i++) {
    let list = [];
    list.push({value: values[index++], strike: 0});
    list.push({value: values[index++], strike: 1});
    list = list.sort((a, b) => b.value - a.value);
    results.push(list);
  }
  return results;
}
使用D3生成熱圖

我們可以使用D3來顯示預(yù)測結(jié)果。50x50尺寸的每個元素在SVG中呈現(xiàn)為10px x 10px的矩形。每個矩形的顏色取決于預(yù)測結(jié)果(好球或壞球)以及模型對該結(jié)果的確定程度(從50%-100%)。以下代碼段顯示了如何使用D3 svg 矩形組去更新數(shù)據(jù):

function updateHeatmap() {
  rects.data(generateHeatmapData());
  rects
    .attr("x", (coord) => { return scaleX(coord.x) * CONSTANTS.HEATMAP_SIZE; })
    .attr("y", (coord) => { return scaleY(coord.y) * CONSTANTS.HEATMAP_SIZE; })
    .attr("width", CONSTANTS.HEATMAP_SIZE)
    .attr("height", CONSTANTS.HEATMAP_SIZE)
    .style("fill", (coord) => {
      if (coord.strike) {
        return strikeColorScale(coord.value);
      } else {
        return ballColorScale(coord.value);
      }
  });
}

有關(guān)使用D3繪制熱圖的完整詳細信息,請參閱此部分。

總結(jié)

如今web前端有許多令人驚嘆的庫和工具來創(chuàng)建可視化視覺效果。把這些與機器學(xué)習(xí)的強大功能和TensorFlow.js相結(jié)合,可以使開發(fā)人員創(chuàng)建一些非常有趣的demo。

注:本文為譯文,點擊此處預(yù)覽原文

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/19841.html

相關(guān)文章

  • 決勝圣誕,女神心情不猜!

    摘要:萬萬沒想到,在圣誕節(jié)前夕,女神居然答應(yīng)了在下的約會請求。想在下正如在座的一些看官一樣,雖玉樹臨風(fēng)風(fēng)流倜儻,卻總因猜不透女孩的心思,一不留神就落得個母胎單身。在內(nèi)部將張量表示為基本數(shù)據(jù)類型的維數(shù)組。 showImg(https://segmentfault.com/img/remote/1460000017498745); 本文將結(jié)合移動設(shè)備攝像能力與 TensorFlow.js,在瀏覽...

    nanfeiyan 評論0 收藏0
  • Move Mirror:使 TensorFlow.js 在瀏覽器預(yù)測姿勢之 AI 實驗

    摘要:文和,創(chuàng)意實驗室創(chuàng)意技術(shù)專家在機器學(xué)習(xí)和計算機視覺領(lǐng)域,姿勢預(yù)測或根據(jù)圖像數(shù)據(jù)探測人體及其姿勢的能力,堪稱最令人興奮而又最棘手的一個話題。使用,用戶可以直接在瀏覽器中運行機器學(xué)習(xí)模型,無需服務(wù)器。 文 / ?Jane Friedhoff 和 Irene Alvarado,Google 創(chuàng)意實驗室創(chuàng)意技術(shù)專家在機器學(xué)習(xí)和計算機視覺領(lǐng)域,姿勢預(yù)測或根據(jù)圖像數(shù)據(jù)探測人體及其姿勢的能力,堪稱最令人興...

    MiracleWong 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<