{ "info": { "author": "Walt Woods", "author_email": "woodswalben@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "# `keras_pickle_wrapper`\n\nThis small library exposes a KerasPickleWrapper class that allows keras models to be pickled, and even used across multiprocessing (or with a library like [job\\_stream](https://github.com/wwoods/job_stream)).\n\nIt won't be necessary if https://github.com/fchollet/keras/issues/789 is ever properly resolved.\n\n## Installation\n\n`pip install keras-pickle-wrapper`\n\n## Usage\n\n```python\n\nimport keras\nimport pickle\nimport numpy as np\n\nfrom keras_pickle_wrapper import KerasPickleWrapper\n\nins = keras.layers.Input((2,))\nx = ins\nx = keras.layers.Dense(3)(x)\nx = keras.layers.Dense(1)(x)\nm = keras.models.Model(inputs=ins, outputs=x)\nm.compile(loss='mse', optimizer='sgd')\n\n# Wrap a compiled model\nmw = KerasPickleWrapper(m)\n\n# Calling the object returns the wrapped Keras model\nmw().fit([[0,0], [0,1], [1,0], [1,1]], [[0], [1], [1], [0]])\n\n# Pickle / unpickle the wrapper\ndata = pickle.dumps(mw)\nmw2 = pickle.loads(data)\noutput_1 = mw().predict(np.asarray([[0, 0]]))\noutput_2 = mw2().predict(np.asarray([[0, 0]]))\n\n# You can unload the object from memory as well\nmw.unload()\n\n# The object will remain unloaded until requested again\noutput_3 = mw().predict(np.asarray([[0, 0]]))\n\nprint(\"All outputs:\")\nprint(output_1)\nprint(output_2)\nprint(output_3)\n\n# If using tensorflow and pickling / unpickling a lot, be sure to clear the \n# session:\nkeras.backend.clear_session()\n\n# When using a custom layer class, be sure to register it so the pickler works\nclass MyLayer(keras.layers.Layer):\n pass # ...\nKerasPickleWrapper.register(MyLayer)\n```\n\nIf your model takes 1GB of RAM, the default approach should require 2GB additional RAM to encode, as it dumps to shared memory by default. To disable this, set `KerasPickleWrapper.NO_SHM = True`. Temporary files will then be written to the standard temporary directory. Using `KerasPickleWrapper.unload(clear_session=True)` prior to pickling combined with `NO_SHM` should eliminate excess memory consumption, but clears the session (session clearing only applies to Tensorflow at the moment).\n\n\n## Changelog\n\n* 2018-7-17 - Fix for Python 2 in setup.py (FileNotFoundError not existing in Python 2.7), up to V1.0.5.\n* 2017-9-19 - Fix for Python 2, up to V1.0.3.\n* 2017-8-17 - Renamed to keras-pickle-wrapper because PyPI. V1.0.2.\n* 2017-8-17 - Packaged up KerasWrapper for PyPI distribution.\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/wwoods/keras_pickle_wrapper", "keywords": "keras", "license": "", "maintainer": "", "maintainer_email": "", "name": "keras-pickle-wrapper", "package_url": "https://pypi.org/project/keras-pickle-wrapper/", "platform": "", "project_url": "https://pypi.org/project/keras-pickle-wrapper/", "project_urls": { "Homepage": "https://github.com/wwoods/keras_pickle_wrapper" }, "release_url": "https://pypi.org/project/keras-pickle-wrapper/1.0.5/", "requires_dist": null, "requires_python": "", "summary": "A small library that wraps Keras models to pickle them.", "version": "1.0.5" }, "last_serial": 4074334, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "a240e41e8390cb60f86f6b4d885b9b3c", "sha256": "fd539560cedd579137d47b39e0956f49f5f8b05191127a2dfa902bccf1f05528" }, "downloads": -1, "filename": "keras_pickle_wrapper-1.0.0.tar.gz", "has_sig": false, "md5_digest": "a240e41e8390cb60f86f6b4d885b9b3c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2328, "upload_time": "2017-08-17T19:19:18", "url": "https://files.pythonhosted.org/packages/90/c0/df0d9f6de2851f46e30921abea8d9e0c32ebbaa8e99d4dc6ca89c2d32b00/keras_pickle_wrapper-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "0b562275736543ec6539159018ea5423", "sha256": "f5c54188e75edd988bf41dae8c8abeb5f7eb252b4f3f03289597f9b4d20eae5a" }, "downloads": -1, "filename": "keras-pickle-wrapper-1.0.1.tar.gz", "has_sig": false, "md5_digest": "0b562275736543ec6539159018ea5423", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2352, "upload_time": "2017-08-17T19:27:19", "url": "https://files.pythonhosted.org/packages/d4/9c/155f0e57c058831f566ff4a405c92342d4d1e66040a82725bc1807be15c5/keras-pickle-wrapper-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "bbc83319fe733b02005120828463dded", "sha256": "1daef14d540116cde88a8ef745a8fbb41141144c2a7d45ac504e597d9590af2c" }, "downloads": -1, "filename": "keras-pickle-wrapper-1.0.2.tar.gz", "has_sig": false, "md5_digest": "bbc83319fe733b02005120828463dded", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3382, "upload_time": "2017-08-17T19:39:59", "url": "https://files.pythonhosted.org/packages/53/8b/44559508e1b9dd085520558bf36c0540d53b3ef9d7c3ce6dae0c1fa0e6ed/keras-pickle-wrapper-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "ee44997824000ace27aecbeb873d1b25", "sha256": "b360aed65db57b3c984c0ad3a07bf08e95db04cf40f133cdbcbdef8601d80b4b" }, "downloads": -1, "filename": "keras-pickle-wrapper-1.0.3.tar.gz", "has_sig": false, "md5_digest": "ee44997824000ace27aecbeb873d1b25", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3432, "upload_time": "2017-09-20T01:01:43", "url": "https://files.pythonhosted.org/packages/f8/e5/98a80354e2ed01d390116d628f9ddc0b87c5cf5e75546c2433a34054b051/keras-pickle-wrapper-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "f8e6768ac609e547e17fbe7582c112e9", "sha256": "ef2cca8908c52064a4641893c8dc4f6c32b440f72e5d9fee46b4c0a4af0d955a" }, "downloads": -1, "filename": "keras-pickle-wrapper-1.0.4.tar.gz", "has_sig": false, "md5_digest": "f8e6768ac609e547e17fbe7582c112e9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3468, "upload_time": "2018-02-17T00:57:25", "url": "https://files.pythonhosted.org/packages/e0/6f/143e9424930f74a94be3a8670fa17f498b7e845a329b35cd7be1354bbcf8/keras-pickle-wrapper-1.0.4.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "71c52d0a510029ad42428bc35e3a9a67", "sha256": "edf53a71bcf5f14f3653cfa9986a9ad638f9758340c699dd1cc993b7d6927cb0" }, "downloads": -1, "filename": "keras-pickle-wrapper-1.0.5.tar.gz", "has_sig": false, "md5_digest": "71c52d0a510029ad42428bc35e3a9a67", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3510, "upload_time": "2018-07-17T16:01:21", "url": "https://files.pythonhosted.org/packages/57/91/3fad8592aaf17614257fff9bd2206f7d0563bf4b1493fbbf48d17cedb9e1/keras-pickle-wrapper-1.0.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "71c52d0a510029ad42428bc35e3a9a67", "sha256": "edf53a71bcf5f14f3653cfa9986a9ad638f9758340c699dd1cc993b7d6927cb0" }, "downloads": -1, "filename": "keras-pickle-wrapper-1.0.5.tar.gz", "has_sig": false, "md5_digest": "71c52d0a510029ad42428bc35e3a9a67", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3510, "upload_time": "2018-07-17T16:01:21", "url": "https://files.pythonhosted.org/packages/57/91/3fad8592aaf17614257fff9bd2206f7d0563bf4b1493fbbf48d17cedb9e1/keras-pickle-wrapper-1.0.5.tar.gz" } ] }