  Recently, neural networks have spread into numerous fields including many
safety-critical systems. Neural networks are built (and trained) by programming
in frameworks such as TensorFlow and PyTorch. Developers apply a rich set of
pre-defined layers to manually program neural networks or to automatically
generate them (e.g., through AutoML). Composing neural networks with different
layers is error-prone due to the non-trivial constraints that must be satisfied
in order to use those layers. In this work, we propose an approach to
automatically repair erroneous neural networks. The challenge is in identifying
a minimal modification to the network so that it becomes valid. Modifying a
layer might have cascading effects on subsequent layers and thus our approach
must search recursively to identify a "globally" minimal modification. Our
approach is based on an executable semantics of deep learning layers and
focuses on four kinds of errors which are common in practice. We evaluate our
approach for two usage scenarios, i.e., repairing automatically generated
neural networks and manually written ones suffering from common model bugs. The
results show that we are able to repair 100% of a set of randomly generated
neural networks (which are produced with an existing AI framework testing
approach) effectively and efficiently (with an average repair time of 21.08s)
and 93.75% of a collection of real neural network bugs (with an average time of
3min 40s).
