см. этот пример для двоичной классификации.
43 model = L.Classifier(
44 MLP(44, 1), lossfun=F.sigmoid_cross_entropy, accfun=F.binary_accuracy)
подача lossfun=F.sigmoid_cross_entropy
в L.Classifier
является хорошим решением.
В конечном счете Вы получите все возможное от PHP сначала путем изучения обычно хороших практик программирования, прежде, чем сфокусироваться на чем-либо PHP-определенном. Сказав это...
Итераторы в циклах foreach. Почти никогда нет неправильного времени.
Дизайн вокруг автозагрузки класса. Использовать spl_autoload_register()
, нет __autoload()
. Для бонусных очков имейте его, сканируют дерево каталогов рекурсивно, затем не стесняйтесь реорганизовывать свои классы в более логическую структуру каталогов.
Typehint везде. Используйте утверждения для скаляров.
function f(SomeClass $x, array $y, $z) {
assert(is_bool($z))
}
Произведите что-то другое, чем HTML.
header('Content-type: text/xml'); // or text/css, application/pdf, or...
Учитесь использовать исключения. Запишите обработчик ошибок, который преобразовывает ошибки в исключения.
Замените Ваш define()
глобальные константы с константами класса.
Замените свои метки времени Unix надлежащим Date
класс.
В долгих функциях, unset()
переменные, когда Вы сделаны с ними.
Цикл по элементам данных объекта как массив. Чувствуйте себя виновными, что они не объявляются частные. Это не некоторый языческий язык как Python или Lisp.
Используйте буферы вывода для сборки длинных строк.
ob_start();
echo "whatever\n";
debug_print_backtrace();
$s = ob_get_clean();
Волшебные методы (__get
, __set
, __call
)
extract()
Структурированные массивы - используют объект
К счастью, пространства имен находятся в 5,3 и 6. Я настоятельно рекомендовал бы против использования идиомы Path_To_ClassName. Это делает грязный код, и Вы никогда не можете изменять свою структуру библиотеки... никогда.
Автозагрузка SPL является большой. Если Вы организованы, это может сохранить Вас, типичный блок с 20 строками включает и требует наверху каждого файла. Можно также менять вещи в библиотеке кода, и целый PHP может включать из тех каталогов, ничто не повреждается.
Сделайте свободное использование ===
==
. Например:
if (array_search('needle',$array) == false) {
// it's not there, i think...
}
даст ложное отрицание, если 'игла' будет в ключевом нуле. Вместо этого:
if (array_search('needle',$array) === false) {
// it's not there!
}
всегда будет точно.
Посмотрите этот вопрос: Скрытые Функции PHP. Это имеет много действительно полезных подсказок PHP, лучшая из которых пузырились до верхней части списка.
Существует несколько вещей, которые я делаю в PHP, которые имеют тенденцию быть PHP-конкретными.
Соберите строки с массивом.
Большая обработка строк является дорогой в PHP, таким образом, я склонен писать алгоритмы, которые сокращают дискретное количество обработок строк, которые я делаю. Классический пример создает строку с циклом. Запустите с массива (), вместо этого, и действительно выстройте конкатенацию в цикле. Затем интегрируйте () его в конце. (Это также аккуратно решает проблему запятой запаздывания.)
Константы массива являются остротой для реализации именованных параметров к функциям.
Мой опыт с PHP преподавал мне несколько вещей. Назвать некоторых:
ini_set('display_errors', '1');
error_reporting(E_ALL);
Никогда не используйте автоволшебство. Материал как автозагрузка может укусить Вас в будущем.
Всегда требуйте зависимого использования классов require_once
. Тем путем можно быть уверены, что у Вас будут свои зависимости прямо.
Использовать if(isset($array[$key]))
вместо if($array[$key])
. Второе повысит предупреждение, если ключ не будет определен.
При определении переменных (даже с for
циклы), дают им подробные имена ($listIndex
вместо $j
)
Комментарий, комментарий, комментарий. Если конкретный отрывок кода не кажется очевидным, оставляет комментарий. Позже Вы, возможно, должны были бы рассмотреть его и не могли бы помнить то, что это - цель.
Кроме этого, класса, функциональные и переменные соглашения о присвоении имен ваше дело и Ваша команда. В последнее время я использовал соглашения о присвоении имен Платформы Зенда, потому что они чувствуют себя хорошо мне.
Кроме того, и когда в режиме разработки, я установил обработчик ошибок, который произведет ошибочную страницу в малейшей ошибке (даже предупреждения), давая мне полный след.
Я разрабатывал с PHP (и MySQL) в течение прошлых 5 лет. Последний раз я начал использовать платформу (Пехлеви) с солидной библиотекой JavaScript (Dojo), и это изменило способ, которым я работаю навсегда (хорошим способом, я думаю).
Вещью, которая заставила меня думать об этом, был Ваш первый маркер: платформа Зенда делает точно это, поскольку это - стандартный способ получить доступ к 'контроллерам' и 'действиям'.
С точки зрения инкапсуляции и абстракции проблем с различными базами данных, Zend_Db это очень хорошо. Dojo делает превосходное задание сглаживания несоответствий JavaScript между различными браузерами.
В целом, стоит войти в хорошие методы ООП и использовать (и ЧИТАТЬ О!) платформы был очень практический способ добраться для понимания проблем ООП.
Для некоторых автономных инструментов, которые стоит использовать, см. также:
Присяжный острослов (движок шаблонов) ADODB (абстракция доступа к базе данных)
ini_set('display_errors', 1); error_reporting(E_ALL && $_STRICT);
Узнайте различные типы и ===
оператор, это важно для некоторых функций как strpos()
и Вы начнете использовать return false
самостоятельно.