Keras vs TensorFlow

Abu salīdzinājums.

Šajā rakstā es plānoju atbildēt uz šādiem jautājumiem par Keras un TensorFlow:

I. Kas tie ir?

II. Kā viņi strādā?

III. Kādas ir priekšrocības un trūkumi?

IV. Kad man tos vajadzētu lietot?

I. Kas tie ir?

Keras ir atvērtā koda neironu tīkla API, kas rakstīts Python. Tas var darboties papildus vairākām dziļu mācību un mašīnmācīšanās sistēmām, ieskaitot TensorFlow (TF), Microsoft Cognitive Tool (CNTK) un Theano.

TensorFlow ir atvērtā pirmkoda programmatūras bibliotēka augstas veiktspējas simboliskai-skaitliskai aprēķināšanai. To izmanto arī tādām dziļās mācīšanās programmām kā neironu tīkli. Tensora plūsmu izstrādāja Google Brain komanda, un tā ir rakstīta Python, C ++ un CUDA (Nvidia valoda GPU programmēšanai). To var izvietot visdažādākajās platformās (CPU, GPU, TPU).

II. Kā viņi strādā?

Keras ir interfeiss, nevis atsevišķs ietvars, piemēram, TensorFlow. Tas piedāvā augsta līmeņa, intuitīvas abstrakcijas, kas ļauj ātri eksperimentēt.

TensorFlow savu vārdu iegūst no savas funkcionalitātes. Tas lietotājiem ļauj noteikt, kā dati, sensori plūst caur sistēmu.

Šīs analoģijas palīdz ilustrēt Keras funkciju un mērķi. Ja esat izmantojis jūras dzeloni, matplotlip, plotly.js vai d3.js, šī sadaļa ir paredzēta jums. Pretējā gadījumā pārejiet uz III daļu.

Pirmā analoģija: Keras izmanto TensorFlow, bet jūras dzelonis ir matplotlib

Seaborn ir augsta līmeņa saskarne, kas balstīta uz matplotlib. Ja es gribētu izveidot sadalījuma diagrammu ar lineāru regresiju, kas derētu ar x un y etiķetēm, izmantojot jūras dzeloni, man būtu vajadzīgas tikai 3 līnijas:

ievest jūradzimis kā sns
df = sns.load_dataset ('datu kopa')
sns.regplot (x = df ["neatkarīgs"], y = df ["atkarīgs"])
sns.plt.show ()

Tomēr, ja es gribētu izveidot to pašu sižetu matplotlib, es būtu rīkojies kaut kas līdzīgs:

importēt matplotlib.pyplot kā plt
importēt nervozs kā np
plt.figure (figsize = (10,10))
plt.xlabel ("neatkarīgs")
plt.ylabel ("atkarīgs")
plt.grid ()
m, b = np.polyfit (x, y, 1)
plt.plot (x, y, '.')
plt.plot (x, m * x + b, '-')

Seaborn ir vienkāršākais un efektīvākais veids, kā iegūt standarta izkliedes diagrammu ar visām paredzētajām funkcijām. Tomēr, ja es gribētu izveidot izkliedi bez etiķetes vai etiķetes matplotlib būtu efektīvākas. Tāpat Keras ir veids, kā iet, ja vēlaties izveidot funkcionālu modeli ar pārbaudītu un patiesu metodiku.

Otrā analoģija: Keras ir paredzēts TensorFlow, kā plotly.js ir d3.js

Ja jūs vēlaties izveidot vienkāršu joslu diagrammu, salīdzinot “summu” katrā “kategorijā”, izmantojot d3.js, jūsu js fails, iespējams, izskatās šādi:

var svgWidth = 960;
var svgHeight = 500;
var chartMargin = {
  top: 30,
  pa labi: 30,
  apakšā: 30,
  pa kreisi: 30
};
var chartWidth = svgWidth - chartMargin.left - chartMargin.right;
var chartHeight = svgHeight - chartMargin.top - chartMargin.bottom;
var svg = d3.select (“body”)
  .append ("svg")
  .attr ("augstums", svgHeight)
  .attr ("platums", svgWidth)
var chartGroup = svg.append ("g")
  .attr ("pārveidot", "tulkot (" + chartMargin.right + "," + chartMargin.top + ")");
var xBandScale = d3.scaleBand (). diapazons ([0, diagrammas platums]). polsterējums (0,1);
var yLinearScale = d3.scaleLinear () diapazons ([chartHeight, 0]);
d3.csv ("data.csv", funkcija (kļūda, dati) {
  if (kļūda) mest kļūdu;
console.log (tvData);
  Data.forEach (funkcija (dati) {
    dati.summa = + dati.summa;
  });
  xBandScale.domain (Data.map (funkcija (dati) {
    atgriezt datus.kategorija;
  }));
  yLinearScale.domain ([0, d3.max (dati, funkcija (dati) {
    atgriezt datus.y;
  })]);
  var bottomAxis = d3.axisBottom (xBandScale);
  var leftAxis = d3.axisLeft (yLinearScale) .ticks (10);
  chartGroup.selectAll (". bar")
    .data (dati)
    .enter ()
    .append ("rect")
    .attr ("klase", "josla")
    .attr ("x", funkcija (dati) {
      atgriezt xBandScale (dati.kategorija);
    })
    .attr ("y", funkcija (dati) {
      atgriezt yLinearScale (dati.summa);
    })
    .attr ("platums", xBandScale.bandwidth ())
    .attr ("augstums", funkcija (dati) {
      atgriešanās chartHeight - yLinearScale (dati.summa);
    });
  chartGroup.append ("g")
    .zvans (pa kreisiAxis);
chartGroup.append ("g")
    .attr ("pārveidot", "tulkot (0," + diagrammas augstums + ")")
    .zvans (bottomAxis);
});

Izmantojot plotly.js, ir daudz vienkāršāk. Tas izskatās šādi:

main data = [{
  x: ['pirmā kategorija', 'otrā kategorija', 'trešā kategorija'],
  y: [5, 14, 23],
  tips: 'bar'
}];

Plotly.newPlot ('myDiv', dati);

Plotly ir acīmredzami vieglāk, taču tas ir ierobežots. Ja vēlaties izveidot satriecošas vizualizācijas, jums jāizmanto d3. Ja vēlaties izveidot perfekti funkcionējošus, vienkāršus, lietotājam draudzīgus grafikus, izmantojiet saprātīgi. Līdzīgi, ja vēlaties pilnīgu radošo vadību, izmantojiet TensorFlow. Ja meklējat ātru un ērtu ceļu uz funkcionālu produktu, dodieties uz Keras.

III. Kādas ir priekšrocības un trūkumi?

Kā aprakstījusi Keras kvalificētā mārketinga komanda, Keras priekšrocības ir šādas:

  1. Lietotājdraudzīgums

Tas…

Prioritāte tiek piešķirta lietotāju pieredzei. Samazina izziņas slodzi. Pastāvīgi. Vienkārši. Samazina lietotāju darbību skaitu. Populārs. Atbalsta liela un aktīva kopiena.

2. Modulārums un ērta paplašināmība

Neironu slāņi, funkcijas, shēmas un optimizētāji ir atsevišķi standarti, ko varat apvienot, lai, ja vēlaties, izveidotu jaunus modeļus.

3. Darbs ar Python

Diezgan pašsaprotami. Python kods = kompakts, vieglāk atkļūdot un ļauj ērti paplašināt.

Keras trūkumi:

  1. Ierobežota kontrole

Keras ir skaisti uzrakstīts API, kas neliedz piekļuvi zemāka līmeņa ietvariem. Tomēr Keras nav īsti paredzēts, lai jūs mainītu modeļa pamatā esošo arhitektūru. Jūs varat pielāgot slāņus Keras (šeit ir lielisks piemērs), taču jums varētu būt jēga izmantot tikai TensorFlow. Atkarībā no tā, ko jūs mēģināt darīt, iespējams, esat ieviesis savu treniņu rutīnu ārpus Keras.

TensorFlow priekšrocības:

  1. Jaudīgs

TensorFlow var izmantot dažādos lietojuma gadījumos. To var izmantot, lai izveidotu gandrīz jebko, kas saistīts ar datu apstrādi, palaižot tajā virkni matemātisku darbību. Tomēr TensorFlow visbiežāk izmanto, lai veidotu neironu tīklus, un tas uzņemas vadību dziļu mācību procesā. Ja jūs mēģināt veikt vienkāršu mašīnu apguvi, iespējams, vēlēsities pieturēties pie scikit-learning. Ja strādājat ar mazām datu kopām, TensorFlow varētu būt pārāk liels.

Lielais vilnis pie Kanagavas, kā to ir interpretējis slavenais Google DeepDream, kas nodarbina TensorFlow

2. Versija

TensorFlow ne tikai nodrošina pilnīgu kontroli pār savu modeli, bet arī par jūsu pirmapstrādes loģiku. Pagājušajā gadā Google paziņoja par TensorFlow Transform, kas ļauj lietotājam definēt priekšapstrādes cauruļvadus, kas atbalsta datu pilnīgu nodošanu liela mēroga, efektīvai, izplatītai datu apstrādei. Jūs varat uzzināt vairāk šeit.

TensorFlow trūkumi:

  1. Grūtāk

Ar lielu jaudu nāk liela vilšanās. Gaidiet vairāk sintaktisko kļūdu, tukšu skatienu, kaudzes pārpildes laika un pilnīgas neskaidrības.

IV. Kad man tos vajadzētu lietot?

Ja esat pētnieks vai padziļinātu mācību guru, tad pirmo reizi varat izmantot Keras, jo tas ļauj ātri izpildīt prototipus un POC eksperimentus. Tad jūs varētu pāriet uz TensorFlow, lai iegūtu pilnīgu kontroli pār tīkla darbībām un slāņiem. Izmantojot atkļūdotāju, jūs varat arī gūt ieskatu struktūrā reāllaikā.

Ja vēlaties piedalīties Kaggle sacensībās vai cīnīties ar hackathon, Keras, iespējams, ir jūsu labākā likme. Ja esat iesācējs, kurš vēlas izklaidēties padziļināti, un kurš ir aprīkots tikai ar virspusēju izpratni par neironu tīkliem, Keras ir piemērots jums.

Es ceru, ka tas palīdzēja parādīt dažas atšķirības starp Keras un TensorFlow. Ja jums ir kādi iebildumi vai jautājumi, lūdzu, komentējiet. Es iesaku arī apskatīt šo emuāru, lai iegūtu vairāk informācijas.