To reduce overfitting, you may apply dropout before the readout layer. If try to use frozen graph with dropout in ios app, you will get such error:

Invalid argument: No OpKernel was registered to support Op 'RandomUniform' with these attrs.  Registered devices: [CPU], Registered kernels:
  <no registered kernels>

     [[Node: dropout/random_uniform/RandomUniform = RandomUniform[T=DT_INT32, dtype=DT_FLOAT, seed=0, seed2=0](dropout/Shape)]]

Tested on tensorflow v0.12.1

We need to remove dropout from frozen graph to fix it.
Let’s create frozen_model.pb as shown below:

And remove dropout from frozen graph.

In cell #4 you can see that accuracy is the same, but we don’t need to use keep_prob:0 in feed_dict anymore. Error about missing OpKernel should go away in your ios app. Cheers!