Я занимаюсь немного глубоким обучением, и я хочу захватить значения всех скрытых слоев. Так что я в конечном итоге написания функций, как это:Самый чистый способ объединить сокращение и карту в Python
def forward_pass(x, ws, bs):
activations = []
u = x
for w, b in zip(ws, bs):
u = np.maximum(0, u.dot(w)+b)
activations.append(u)
return activations
Если у меня не было, чтобы получить промежуточные значения, я бы использовать гораздо менее многословным вид:
out = reduce(lambda u, (w, b): np.maximum(0, u.dot(w)+b), zip(ws, bs), x)
Bam. Вся одна линия, хорошая и компактная. Но я не могу сохранить какие-либо промежуточные значения.
Итак, какой способ получить мой торт (приятный компактный однострочный) и съесть его тоже (вернуть промежуточные значения)?
Edit: Мои выводы до сих пор:
В Python 2.x, нет чистой один вкладыш для этого.
В Python 3 есть itertools.accumulate
, но он по-прежнему не очень чистый, потому что он не принимает «начальный» вход, как это делает reduce
.
В Python 4 Прошу «карту-свертка понимание»:
activations = [u=np.maximum(0, u.dot(w)+b) for w, b in zip(ws, bs) from u=x]
Что также даст полезную работу в этой from
ключевое слово, которое обычно просто сидит, ничего не делая после того, как все импорта выполняются.
И какие из них ваш 'промежуточный values', что вы хотели бы сохранить? – Divakar
Расскажите нам о 'x',' ws', 'bs', особенно о их размерах. Может быть, даже набор образцов с выходом. – hpaulj
Это '(w, b)' дает мне синтаксическую ошибку (в Py3) – hpaulj