This neural network can tell you which other ingredients you can add to your cooking recipes to improve them. It's trained on the simplified-recipes-1M dataset which differentiates between 3500 different ingredients.
You can read the full article here.
For example, using this (partial) ingredient list for maki (sushi) as input [salt, sugar, rice, cucumber, nori, sushi rice], the network successfully suggests fitting ingredients including common fillings like avocado, salmon and cucumber.
(top 14 out of 3500 known ingredients shown, parenthesized ingredients are similar to one or more ingredients in the input and are not helpful and not hard to guess for the network)
| Ingredient | confidence | fitting? | notes |
|---|---|---|---|
(seaweed) |
0.131 | X | to wrap the maki |
water |
0.081 | X | for cooking the rice |
mayonnaise |
0.028 | X | not in traditional maki, but not uncommon |
avocado |
0.025 | X | as a filling |
(nori) |
0.025 | X | seaweed - to wrap the maki |
salmon |
0.018 | X | as a filling |
wasabi |
0.015 | X | maki is commonly served with wasabi |
roe |
0.013 | X | for ikura maki |
lettuce |
0.013 | ||
vinegar |
0.010 | X | for sumeshi (vinegared sushi rice) |
eggs |
0.010 | ~ | maybe for the mayonnaise? |
(sushi rice) |
0.008 | X | |
egg |
0.007 | ~ | same as eggs |
(english cucumber) |
0.006 | X | as a filling |
In other training attempts the model also suggested crab sticks, ginger and mango.
For the (partial) burrito recipe [peppers, rice, tortillas, black beans, flour tortillas, guacamole] the model suggested many common burrito ingredients, but also less common ones like mozzarella cheese and corn.
| Ingredient | confidence | fitting? | notes |
|---|---|---|---|
(black) |
0.868 | / | ingredient cleaning artifact |
salt |
0.098 | X | seasoning |
onion |
0.057 | X | vegetables |
(bell peppers) |
0.038 | X | vegetables |
corn |
0.035 | X | vegetables |
chicken |
0.026 | X | meat |
seasoning mix |
0.021 | X | seasoning |
oil |
0.021 | X | oil |
cheese |
0.020 | X | cheese |
(red peppers) |
0.020 | X | vegetables |
salsa |
0.018 | X | seasoning |
(green peppers) |
0.013 | X | vegetables |
onions |
0.013 | X | vegetables |
(chili peppers) |
0.007 | X | vegetables |
mozzarella cheese |
0.007 | X | cheese |
water |
0.007 | X | for cooking the rice |
In other training attempts the model also suggested ground beef and salt.
For the fairly basic vegetables and rice recipe [salt, pepper, tomatoes, carrots, oil, seasoning, rice, bell peppers, vegetables, spices] the network suggested adding many other kinds of vegetables and also chicken.
| Ingredient | confidence | fitting? | notes |
|---|---|---|---|
(peppers) |
0.935 | X | vegetables |
onion |
0.225 | X | vegetables |
onions |
0.176 | X | vegetables |
chicken |
0.099 | X | meat |
(green bell peppers) |
0.082 | X | vegetables |
(mixed vegetables) |
0.065 | X | vegetables |
cauliflower |
0.056 | X | vegetables |
zucchini |
0.056 | X | vegetables |
(italian seasoning) |
0.049 | X | seasoning |
sugar |
0.048 | ||
celery |
0.033 | X | vegetables |
water |
0.030 | ~ | |
garlic |
0.027 | X | seasoning |
(black pepper) |
0.022 | X | seasoning |
You can download the code above. Go here for the dataset-only download and further information on the format.
(skip to step 4 if you already have the simplified-recipes-1M.npz file and do not wish to recreate the dataset with different parameters)
- Manually download the three used Kaggle datasets as described in the second cell in
recipeprep.ipynb - Use
recipeprep.ipynbto download all other datasets and extract, merge, process and clean all of them. Here all used datasets get unified, messy ingredient strings get stripped of non-alpha chars and similar ingredients get merged. This step creates a ~200MB filedata.picklethat contains preprocessed recipe and ingredient data. - Use
ingredient_extract.ipynbto further clean and simplify ingredients. This is necessary since ingredients are initially in a bad format (like '1 1/2 lbs of chicken breasts' or 'a finely blended 2:3 mix of greek yoghurt and milk' instead of 'chicken' or ['yoghurt', 'milk']). This step creates a ~60MB filerecipes.npzcontaining simplified recipe-ingredient-lists using the most common 3500 ingredients. This can take up to two hours. The next step reads thesimplified-recipes-1M.npzdataset so if you want to use your recreated dataset make sure to replace it with yourrecipes.npzfile. - Use
recipenet.ipynbto train or load the neural network and make predictions. Training for 4-8 epochs takes 15-30 minutes on an NVIDIA RTX 2080 Ti GPU depending on the selected architecture.
hparam_tune.pycontains code for hyperparameter optimation with TensorBoardutil.pycontains code for loading and managing the dataset during trainingsetup.shcontains code for setup on a remote serverrecipenet_saved_model.zipcontains a saved_model (training from scratch is recommended)


