Imagine, you want to re-compute the last layer of a pre-trained model :
Input->[Freezed-Layers]->[Last-Layer-To-Re-Compute]->Output
To train [Last-Layer-To-Re-Compute], you need to evaluate outputs of [Freezed-Layers] multiple times for a given input data. In order to save time, you can compute these ouputs only once.
Input#1->[Freezed-Layers]->Bottleneck-Features-Of-Input#1
Then, you store all Bottleneck-Features-Of-Input#i and directly use them to train [Last-Layer-To-Re-Compute].
Explanations from the "cache_bottlenecks" function of the "image_retraining" example :
Because we're likely to read the same image multiple times (if there are no distortions applied during training) it can speed things up a lot if we calculate the bottleneck layer values once for each image during preprocessing, and then just read those cached values repeatedly during training.