Keras vs TensorFlow

Nende kahe võrdlus.

Selles postituses kavatsen vastata järgmistele küsimustele Kerase ja TensorFlow kohta:

I. Mis nad on?

II. Kuidas nad töötavad?

III. Millised on plussid ja miinused?

IV. Millal peaksin neid kasutama?

I. Mis nad on?

Keras on avatud lähtekoodiga neuraalvõrgu API, mis on kirjutatud Pythonis. Seda saab kasutada lisaks mitmele sügava õppimise ja masinõppe raamistikule, sealhulgas TensorFlow (TF), Microsofti kognitiivne tööriist (CNTK) ja Theano.

TensorFlow on avatud lähtekoodiga tarkvararaamatukogu suure jõudlusega sümboolse ja numbrilise arvutuse jaoks. Seda kasutatakse ka süvaõpperakendustes nagu närvivõrgud. Tensor flow arendas välja Google Braini meeskond ja see on kirjutatud Python, C ++ ja CUDA (Nvidia keel GPUde programmeerimiseks). Seda saab kasutada paljudel erinevatel platvormidel (protsessorid, GPU-d, TPU-d).

II. Kuidas nad töötavad?

Keras on pigem liides kui eraldiseisev raamistik, nagu TensorFlow. See pakub kõrgel tasemel intuitiivseid abstraktsioone, mis võimaldavad kiiret katsetamist.

TensorFlow saab oma nime funktsionaalsusest. See võimaldab kasutajatel määratleda, kuidas andmed, tenorid süsteemist läbi voolavad.

Järgmised analoogiad aitavad illustreerida Kerase funktsiooni ja eesmärki. Kui olete kasutanud merelinna, matplotlip, plotly.js või d3.js, on see jaotis teie jaoks. Muul juhul minge III osasse.

Analoogia üks: Keras on TensorFlow jaoks, kuna merilinn on matplotlib

Seaborn on matplotlibil põhinev kõrgetasemeline liides. Kui ma sooviksin teha merihõnga abil sirgjoonelise regressiooniga hajutatud graafiku x ja y siltidega, oleks mul vaja ainult 3 rida:

impordi mereannid sns-na
df = sns.load_dataset ('andmestik')
sns.regplot (x = df ["sõltumatu"], y = df ["sõltuv"])
sns.plt.show ()

Kui ma tahaksin luua sama süžee matplotlibis, oleksin siiski teinud midagi sellist:

import matplotlib.pyplot plt
impordi numpy kui np
plt.figure (figsize = (10,10))
plt.xlabel ("sõltumatu")
plt.ylabel ("sõltuv")
plt.grid ()
m, b = np.polüfit (x, y, 1)
plt.plot (x, y, '.')
plt.plot (x, m * x + b, '-')

Seaborn on lihtsam ja tõhusam viis kõigi eeldatavate funktsioonidega standardse hajutatud graafiku loomiseks. Kuid kui ma tahaksin teha hajutatud plaadi ilma sobivuseta või oleks sildid matplotlib tõhusamad. Samamoodi on tee Keras, kui soovite toota funktsionaalse mudeli koos proovitud ja tõese metoodikaga.

Teine analoogia: Keras on TensorFlow, nagu plotly.js on d3.js

Kui soovite luua lihtsa tulpdiagrammi, kus võrreldakse kategooriate d3.js abil summat igas kategoorias, näib teie js-fail tõenäoliselt umbes selline:

var svgLaius = 960;
var svgKõrgus = 500;
var chartMargin = {
  ülemine: 30,
  paremal: 30,
  alt: 30,
  vasakul: 30
};
var chartWidth = svgWidth - chartMargin.left - chartMargin.right;
var chartHeight = svgHeight - chartMargin.top - chartMargin.bottom;
var svg = d3.select ("body")
  .append ("svg")
  .attr ("kõrgus", svgHeight)
  .attr ("laius", svgWidth)
var chartGroup = svg.append ("g")
  .attr ("teisendamine", "tõlkimine (" + diagrammMargin.right + "," + diagramMargin.top + ")");
var xBandScale = d3.scaleBand (). vahemik ([0, diagrammilaius]) .polsterdus (0,1);
var yLinearScale = d3.scaleLinear (). range ([chartHeight, 0]);
d3.csv ("data.csv", funktsioon (tõrge, andmed) {
  if (viga) viske viga;
console.log (tvData);
  Data.forEach (funktsioon (andmed) {
    andmed.kogus = + andmed.kogus;
  });
  xBandScale.domain (Data.map (funktsioon (andmed) {
    tagasi andmed.kategooria;
  }));
  yLinearScale.domain ([0, d3.max (andmed, funktsioon (andmed) {
    tagasi andmed.y;
  })]);
  var bottomAxis = d3.axisBottom (xBandScale);
  var leftAxis = d3.axisLeft (yLinearScale) .ticks (10);
  chartGroup.selectAll (". bar")
    .data (andmed)
    .sisenema()
    .append ("rect")
    .attr ("klass", "riba")
    .attr ("x", funktsioon (andmed) {
      tagastama xBandScale (andmed.kategooria);
    })
    .attr ("y", funktsioon (andmed) {
      tagasi yLinearScale (andmed.kogus);
    })
    .attr ("laius", xBandScale.bandwidth ())
    .attr ("kõrgus", funktsioon (andmed) {
      return chartHeight - yLinearScale (andmemaht);
    });
  chartGroup.append ("g")
    .kõne (vasakpoolne);
chartGroup.append ("g")
    .attr ("teisendamine", "tõlkimine (0," + diagrammi kõrgus + ")")
    .kõne (altAksis);
});

Plotly.js kasutamine on palju lihtsam. See näeks välja järgmine:

muutuja andmed = [{
  x: ['esimene kategooria', 'teine ​​kategooria', 'kolmas kategooria'],
  y: [5, 14, 23],
  tüüp: 'baar'
}];

Plotly.newPlot ('myDiv', andmed);

Plotly on ilmselgelt lihtsam, kuid see on piiratud. Uimastatavate visualisatsioonide loomiseks peate kasutama d3. Kui soovite luua täiesti funktsionaalseid, lihtsaid ja kasutajasõbralikke graafikuid, kasutage seda graafiliselt. Kui soovite täielikku loomingulist juhtimist, kasutage samamoodi TensorFlow. Kui otsite kiiret ja lihtsat marsruuti funktsionaalse toote juurde, siis minge Kerasse.

III. Millised on plussid ja miinused?

Nagu Kerase osav turundusmeeskond kirjeldas, on Kerase eeliste hulka kuuluvad:

  1. Kasutajasõbralikkus

See ...

Eelistab kasutajakogemust. Minimeerib kognitiivset koormust. Pidev. Lihtne. Vähendab kasutaja toimingute arvu. Populaarne. Toetab suur ja aktiivne kogukond.

2. Modulaarsus ja hõlpsasti laiendatav

Neuraalsed kihid, funktsioonid, skeemid ja optimeerijad on kõik eraldiseisvad moodulid, mida saate soovi korral uute mudelite loomiseks kombineerida.

3. Töötage Pythoniga

Päris iseenesest mõistetav. Pythoni kood = kompaktne, seda on kergem siluda ja see on hõlpsasti laiendatav.

Kerase puudused:

  1. Piiratud kontroll

Keras on ilusti kirjutatud API, mis ei blokeeri juurdepääsu madalama taseme raamistikele. Nagu öeldud, pole Keras tegelikult mõeldud teie mudeli aluseks oleva arhitektuuri muutmiseks. Saate oma kihte Keras kohandada (siin on suurepärane näide), kuid võib-olla on mõistlik, et kasutate lihtsalt TensorFlow. Sõltuvalt sellest, mida proovite teha, võisite oma treeningprogrammi rakendada väljaspool Kerast.

TensorFlow eelised:

  1. Võimas

TensorFlow saab kasutada erinevatel kasutusjuhtudel. Selle abil saab ehitada peaaegu kõike, mis hõlmab andmete töötlemist, käivitades sellel matemaatilisi toiminguid. TensorFlow kasutatakse kõige sagedamini närvivõrkude ehitamiseks ja see võtab sügava õppimise eestvedaja rolli. Kui proovite teha lihtsat masinõpet, võiksite jääda ainult skikit-õppima. Kui töötate väikeste andmekogumitega, võib TensorFlow olla liiga suur.

Suur laine Kanagawist, nagu on tõlgendanud Google'i kuulus DeepDream, kus töötab TensorFlow

2. Versitiil

TensorFlow ei anna mitte ainult täielikku kontrolli oma mudeli, vaid ka eeltöötluse loogika üle. Eelmisel aastal kuulutas Google välja TensorFlow Transform, mis võimaldab kasutajal määratleda eeltöötluse torujuhtmed, mis toetavad andmete täielikku edastamist suuremahuliseks, tõhusaks ja hajutatud andmetöötluseks. Lisateavet saate siit.

TensorFlow puudused:

  1. Raskem

Suure jõuga kaasneb suur pettumus. Võib oodata rohkem süntaktilisi vigu, tühje vahtimisi, virna ülevoolu aega ja täielikku segadust.

IV. Millal peaksin neid kasutama?

Kui olete teadlane või sügava õppimise guru, võite kasutada Kerasi esimesel käitusel, kuna see võimaldab prototüüpide ja POC-katsete kiiret täitmist. Seejärel võite liikuda TensorFlowi, et saada täielik kontroll oma võrgu sammude ja kihtide üle. Samuti saate siluri abil saada reaalajas ülevaate struktuurist.

Kui soovite osaleda Kaggle'i võistlusel või tegeleda hackathoniga, on Keras tõenäoliselt teie parim panus. Kui olete algaja, kes soovib lõbutseda sügava õppimisega ja kellel on vaid närvivõrkude pealiskaudne mõistmine, on Keras teile sobiv.

Loodetavasti aitas see illustreerida mõningaid erinevusi Kerase ja TensorFlow vahel. Kui teil on vastuväiteid või küsimusi, palun kommenteerige. Soovitan ka selle ajaveebi kohta lisateavet vaadata.