diff --git a/mhcflurry/__init__.py b/mhcflurry/__init__.py
index ab21634ef51b18b023376f6919e7a15382aa44f2..cf13e1e6339778da3c658e5d9b64afddfac31ecb 100644
--- a/mhcflurry/__init__.py
+++ b/mhcflurry/__init__.py
@@ -17,7 +17,7 @@ from .class1_affinity_prediction.class1_neural_network import (
 from .class1_affinity_prediction.class1_affinity_predictor import (
     Class1AffinityPredictor)
 
-__version__ = "0.9.2"
+__version__ = "0.9.3"
 
 __all__ = [
     "Class1NeuralNetwork",
diff --git a/mhcflurry/class1_affinity_prediction/train_allele_specific_models_command.py b/mhcflurry/class1_affinity_prediction/train_allele_specific_models_command.py
index 6f0aa97529613321e2f3986a9d38201f3bd27983..1128ca99a3dfaef999d2b131ea3f6865faf53127 100644
--- a/mhcflurry/class1_affinity_prediction/train_allele_specific_models_command.py
+++ b/mhcflurry/class1_affinity_prediction/train_allele_specific_models_command.py
@@ -5,7 +5,7 @@ Train Class1 single allele models.
 import os
 import sys
 import argparse
-import json
+import yaml
 
 import pandas
 
@@ -31,7 +31,7 @@ parser.add_argument(
     "--hyperparameters",
     metavar="FILE.json",
     required=True,
-    help="JSON of hyperparameters")
+    help="JSON or YAML of hyperparameters")
 parser.add_argument(
     "--allele",
     default=None,
@@ -61,7 +61,7 @@ def run(argv=sys.argv[1:]):
 
     configure_logging(verbose=args.verbosity > 1)
 
-    hyperparameters_lst = json.load(open(args.hyperparameters))
+    hyperparameters_lst = yaml.load(open(args.hyperparameters))
     assert isinstance(hyperparameters_lst, list)
     print("Loaded hyperparameters list: %s" % str(hyperparameters_lst))
 
diff --git a/requirements.txt b/requirements.txt
index 51a6f3a0b6275aaed36f757a1695f2150e59acd8..674448430078d33c6c5dc5eb61cea856f22f21c0 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,9 +1,10 @@
 six
-numpy>= 1.11
+numpy>=1.11
 pandas>=0.13.1
-Keras==2.0.8
+Keras==2.0.9
+tensorflow>=1.4.0
 appdirs
-tensorflow
 scikit-learn
 typechecks
 mhcnames
+pyyaml
diff --git a/setup.py b/setup.py
index ae7b0a20d219218b0e7980dff534a08887f6a55c..5eeec1c534f870f0e88d7b9e1de6605775ea2676 100644
--- a/setup.py
+++ b/setup.py
@@ -51,12 +51,13 @@ if __name__ == '__main__':
         'six',
         'numpy>=1.11',
         'pandas>=0.13.1',
-        'Keras==2.0.8',
+        'Keras==2.0.9',
         'appdirs',
-        'tensorflow',
+        'tensorflow>=1.4.0',
         'scikit-learn',
         'typechecks',
         'mhcnames',
+        'pyyaml',
     ]
     if PY2:
         # concurrent.futures is a standard library in Py3 but Py2