Керас срещу TensorFlow

Сравнение на двете.

В тази публикация смятам да отговоря на следните въпроси за Keras и TensorFlow:

I. Какви са те?

II. Как работят?

III. Какви са предимствата и недостатъците?

IV. Кога трябва да ги използвам?

I. Какви са те?

Keras е API на невронната мрежа с отворен код, написан на Python. Той може да работи върху няколко рамки за дълбоко обучение и машинно обучение, включително TensorFlow (TF), Microsoft Cognitive Tool (CNTK) и Theano.

TensorFlow е софтуерна библиотека с отворен код за високоефективни символно-цифрови изчисления. Използва се и за приложения за дълбоко обучение като невронни мрежи. Тензорният поток е разработен от екипа на Google Brain и е написан на Python, C ++ и CUDA (езикът на Nvidia за програмиране на графични процесори). Той може да бъде разположен в голямо разнообразие от платформи (процесори, графични процесори, TPU).

II. Как работят?

Keras е интерфейс, а не самостоятелна рамка, като TensorFlow. Той предлага интуитивни абстракции на високо ниво, които дават възможност за бързо експериментиране.

TensorFlow получава името си от своята функционалност. Тя позволява на потребителите да определят как данните, тензорите протичат през дадена система.

Следващите аналогии помагат да се илюстрира функцията и целта на Керас. Ако сте използвали seaborn, matplotlip, plotly.js или d3.js, този раздел е за вас. В противен случай преминете към част III.

Аналогия първа: Keras е да TensorFlow, тъй като морското раждане е matplotlib

Seaborn е интерфейс на високо ниво, базиран на matplotlib. Ако исках да направя разпръсквач с линейна регресия, подходяща с етикети x и y, като използвам морско раждане, ще ми трябват само 3 реда:

импортиране на морско раждане като sns
df = sns.load_dataset ("набор данни")
sns.regplot (x = df ["независим"], y = df ["зависим"])
sns.plt.show ()

Ако обаче исках да създам същия сюжет в matplotlib, щях да направя нещо като:

импортиране matplotlib.pyplot като plt
импортиране numpy като np
plt.figure (figsize = (10,10))
plt.xlabel ( "независим")
plt.ylabel ( "зависимо")
plt.grid ()
m, b = np.полифит (x, y, 1)
plt.plot (x, y, '.')
plt.plot (x, m * x + b, '-')

Seaborn е по-простият и ефикасен начин за получаване на стандартна графика за разпръскване с всички очаквани функции. Ако обаче исках да направя разпръсквач без напасване или етикети, matplotlib би бил по-ефективен. По същия начин, Keras е пътят, ако искате да създадете функционален модел с изпитана и вярна методология.

Аналогия втора: Керас е TensorFlow, както plotly.js е d3.js

Ако искате да създадете обикновена лентова графика, сравнявайки „сумата“ във всяка „категория“, използвайки d3.js, вашият js файл вероятно ще изглежда нещо подобно:

var svgWidth = 960;
var svgHeight = 500;
var chartMargin = {
  отгоре: 30,
  вдясно: 30,
  дъно: 30,
  вляво: 30
};
var chartWidth = svgWidth - chartMargin.left - chartMargin.right;
var chartHeight = svgHeight - chartMargin.top - chartMargin.bottom;
var svg = d3.select ("тяло")
  .append ( "SVG")
  .attr ("височина", svgHeight)
  .attr ("ширина", svgWidth)
var chartGroup = svg.append ("g")
  .attr ("преобразуване", "превод (" + диаграмаMargin.right + "," + chartMargin.top + ")");
var xBandScale = d3.scaleBand (). обхват ([0, диаграма на ширина]). подплънки (0,1);
var yLinearScale = d3.scaleLinear (). обхват ([chartHeight, 0]);
d3.csv ("data.csv", функция (грешка, данни) {
  if (грешка) грешка при хвърляне;
console.log (tvData);
  Data.forEach (функция (данни) {
    data.amount = + data.amount;
  });
  xBandScale.domain (Data.map (функция (данни) {
    връщане на данни.категория;
  }));
  yLinearScale.domain ([0, d3.max (Данни, функция (данни) {
    връщане на данни.y;
  })]);
  var bottomAxis = d3.axisBottom (xBandScale);
  var leftAxis = d3.axisLeft (yLinearScale) .ticks (10);
  chartGroup.selectAll ( ". бар")
    .data (Data)
    Въведете желаната ()
    .append ( "прякото")
    .attr ("клас", "бар")
    .attr ("x", функция (данни) {
      връщане xBandScale (data.category);
    })
    .attr ("y", функция (данни) {
      върнете yLinearScale (data.amount);
    })
    .attr ("ширина", xBandScale.bandwidth ())
    .attr ("височина", функция (данни) {
      обратна диаграмаHeight - yLinearScale (data.amount);
    });
  chartGroup.append ( "G")
    .call (leftAxis);
chartGroup.append ( "G")
    .attr ("преобразуване", "превод (0," + диаграмаHeight + ")")
    .call (bottomAxis);
});

Използването plotly.js е много по-просто. Ще изглежда така:

var data = [{
  x: [„категория първа“, „категория втора“, „категория три“],
  y: [5, 14, 23],
  тип: 'бар'
}];

Plotly.newPlot ('myDiv', данни);

Очевидно е по-лесно, но е ограничено. Ако искате да създадете зашеметяващи визуализации, трябва да използвате d3. Ако искате да създадете идеално функционални, прости, лесни за използване графики, използвайте сюжетно. По същия начин, ако искате пълен творчески контрол, използвайте TensorFlow. Ако търсите бърз и лесен път към функционален продукт, вземете Keras.

III. Какви са предимствата и недостатъците?

Както е описано от квалифицирания маркетинг екип на Keras, предимствата на Keras включват:

  1. Удобство за потребителя

То…

Приоритизира потребителското изживяване. Минимизира когнитивния товар. Constant. Simple. Намалява броя на действията на потребителя. Популярен. Подкрепена от голяма и активна общност.

2. Модулност и лесна разтегливост

Невронните слоеве, функции, схеми и оптимизатори са всички самостоятелни модули, които можете да комбинирате, за да създадете нови модели, ако желаете.

3. Работете с Python

Доста самостоятелно обяснение. Python код = компактен, по-лесен за отстраняване на грешки и позволява лесно разширяване.

Недостатъци на Keras:

  1. Ограничен контрол

Keras е прекрасно написан API, който не блокира достъпа до рамки от по-ниско ниво. Като се има предвид, Керас не е предназначен наистина за промяна на основната архитектура на вашия модел. Можете да персонализирате слоевете си в Keras (тук е чудесен пример), но може да има смисъл да използвате TensorFlow. В зависимост от това, което се опитвате да направите, може да приложите тренировъчната си програма извън Keras.

Предимства на TensorFlow:

  1. мощен

TensorFlow може да се приложи към различни случаи на употреба. Може да се използва за изграждане на почти всичко, което включва обработка на данни, като се изпълняват поредица от математически операции върху него. Въпреки това, TensorFlow най-често се използва за изграждане на невронни мрежи и заема водещо място в задълбоченото обучение. Ако се опитвате да правите просто машинно обучение, може просто да искате да се придържате към scikit-learning. Ако работите с малки набори от данни, TensorFlow може да е излишен.

Голямата вълна край Kanagaw, както се тълкува от известния DeepDream на Google, който използва TensorFlow

2. Универсален

TensorFlow ви дава не само пълен контрол върху вашия модел, но и над вашата логика на предварителна обработка. Миналата година Google обяви TensorFlow Transform, който позволява на потребителя да дефинира предварително обработени тръбопроводи, които поддържат пълни пропуски над данните за мащабна, ефективна и разпределена обработка на данни. Можете да научите повече тук.

Недостатъци на TensorFlow:

  1. Harder

С голяма сила идва голямо разочарование. Очаквайте още синтактични грешки, празни погледи, време за препълване на стека и пълна объркване.

IV. Кога трябва да ги използвам?

Ако сте изследовател или гуру на задълбочено обучение, тогава можете да използвате Керас за първо изпълнение, защото това позволява бързо изпълнение на прототипи и POC експерименти. След това можете да преминете към TensorFlow, за да получите пълен контрол върху стъпките и слоевете във вашата мрежа. Можете също така да получите представа за структурата в реално време, като използвате грешката.

Ако търсите да участвате в състезание по Kaggle или да се справите с хакатон, Керас е може би най-добрият ви залог. Ако сте новак, който иска да се забавлява с задълбочено обучение, който е оборудван само с повърхностно разбиране на невронните мрежи, Керас е подходящ за вас.

Надявам се това да помогне да се илюстрират някои от разликите между Keras и TensorFlow. Ако имате възражения или въпроси, моля, коментирайте. Аз също препоръчвам да проверите този блог за повече информация.