Improve and polish pycaffe

- fix input preprocessing configuration in 3cac223 picking up on #733
- update examples' outputs given correct preprocessing 9d7346b, always include caffe pythonpath 45d74bd, and reword classification + time on a gtx 770 fc01ee6
- add console output with human-readable labels and a grayscale flag to classify.py courtesy of @petewarden's #735
- fix #525 by scaling data to [0, 255], doing mean subtraction, and then input scaling
I'll check my notes, but I think this had much less impact than the other
changes. I'll plan on reverting for simplicity.

On Monday, August 4, 2014, longjon <notifications@github.com> wrote:

> In python/caffe/pycaffe.py:
>
> > @@ -149,7 +149,10 @@ def _Net_forward_all(self, blobs=None, **kwargs):
> >              all_outs[out].extend(out_blob.copy())
> >      # Package in ndarray.
> >      for out in all_outs:
> > -        all_outs[out] = np.asarray(all_outs[out])
> > +        out_arr = np.zeros((len(all_outs[out]),) + all_outs[out][0].shape, dtype=np.float32)
> > +        for ix, out_ in enumerate(all_outs[out]):
> > +          out_arr[ix] = out_
> > +        all_outs[out] = out_arr
>
> Is this expansion a substantial optimization? I don't feel too bad about
> rewriting the preprocessing list comprehensions as loops, since they
> already have internal logic, but here it's just direct list-to-array; I
> can't read this code without wondering why it was done this way.
>
> Here the speed difference should be smaller by a factor of the batch size.
> If this is still important, perhaps we could put this logic in a helper
> function that includes an explanation for its existence?
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/BVLC/caffe/pull/816/files#r15795258>.
>