davidaf3 commited on
Commit
79a66df
1 Parent(s): 89a0d52

Added model and pipeline

Browse files
Files changed (10) hide show
  1. README.md +2 -0
  2. config.json +1 -0
  3. ingredients_metadata.json +1 -0
  4. pipeline.py +177 -0
  5. requirements.txt +3 -0
  6. tfing.h5 +3 -0
  7. tfing.py +71 -0
  8. tfport.h5 +3 -0
  9. tfport.py +62 -0
  10. transformer.py +179 -0
README.md CHANGED
@@ -1,3 +1,5 @@
1
  ---
2
  license: mit
 
 
3
  ---
 
1
  ---
2
  license: mit
3
+ pipeline_tag: image-classification
4
+ library_name: generic
5
  ---
config.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {}
ingredients_metadata.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"1": {"name": "cottage cheese", "energy": 98.0, "fat": 4.3, "protein": 11.0, "carbs": 3.4000000000000004}, "2": {"name": "strawberries", "energy": 33.0, "fat": 0.3, "protein": 0.7000000000000001, "carbs": 8.0}, "3": {"name": "garden salad", "energy": 64.60000000000001, "fat": 3.4000000000000004, "protein": 6.1, "carbs": 3.2}, "4": {"name": "bacon", "energy": 541.0, "fat": 42.0, "protein": 37.0, "carbs": 1.4000000000000001}, "5": {"name": "potatoes", "energy": 77.0, "fat": 0.1, "protein": 2.0, "carbs": 17.0}, "6": {"name": "caesar salad", "energy": 44.0, "fat": 2.1, "protein": 3.2, "carbs": 4.3}, "7": {"name": "cauliflower", "energy": 25.0, "fat": 0.3, "protein": 1.7999999999999998, "carbs": 5.0}, "8": {"name": "scrambled eggs", "energy": 148.0, "fat": 11.0, "protein": 10.0, "carbs": 1.6}, "9": {"name": "wild rice", "energy": 119.0, "fat": 0.4, "protein": 5.0, "carbs": 25.0}, "10": {"name": "steak", "energy": 271.0, "fat": 19.0, "protein": 25.0, "carbs": 0.0}, "11": {"name": "cheese pizza", "energy": 265.9, "fat": 9.4, "protein": 11.200000000000001, "carbs": 33.5}, "12": {"name": "olives", "energy": 114.99999999999999, "fat": 10.7, "protein": 0.8, "carbs": 6.3}, "13": {"name": "berries", "energy": 56.99999999999999, "fat": 0.3, "protein": 0.7000000000000001, "carbs": 14.000000000000002}, "14": {"name": "asparagus", "energy": 20.4, "fat": 0.1, "protein": 2.1999999999999997, "carbs": 3.9}, "15": {"name": "hash browns", "energy": 326.0, "fat": 22.0, "protein": 2.6, "carbs": 32.0}, "16": {"name": "brussels sprouts", "energy": 43.0, "fat": 0.3, "protein": 3.4000000000000004, "carbs": 9.0}, "17": {"name": "pasta salad", "energy": 201.5, "fat": 11.899999999999999, "protein": 5.8999999999999995, "carbs": 17.299999999999997}, "18": {"name": "turkey", "energy": 189.0, "fat": 7.000000000000001, "protein": 28.999999999999996, "carbs": 0.1}, "19": {"name": "bread", "energy": 265.4, "fat": 4.2, "protein": 13.5, "carbs": 42.3}, "20": {"name": "duck", "energy": 337.0, "fat": 28.000000000000004, "protein": 19.0, "carbs": 0.0}, "21": {"name": "squash", "energy": 20.5, "fat": 0.3, "protein": 0.8999999999999999, "carbs": 3.4000000000000004}, "22": {"name": "guacamole", "energy": 200.0, "fat": 17.1, "protein": 2.9000000000000004, "carbs": 8.6}, "23": {"name": "brown rice", "energy": 111.00000000000001, "fat": 0.8999999999999999, "protein": 2.6, "carbs": 23.0}, "24": {"name": "artic char", "energy": 154.0, "fat": 8.1, "protein": 20.0, "carbs": 0.0}, "25": {"name": "beef", "energy": 250.0, "fat": 15.0, "protein": 26.0, "carbs": 0.0}, "26": {"name": "white rice", "energy": 130.0, "fat": 0.3, "protein": 2.7, "carbs": 28.000000000000004}, "27": {"name": "broccoli", "energy": 35.0, "fat": 0.4, "protein": 2.4, "carbs": 7.000000000000001}, "28": {"name": "chicken", "energy": 165.0, "fat": 3.5999999999999996, "protein": 31.0, "carbs": 0.0}, "29": {"name": "mixed greens", "energy": 28.000000000000004, "fat": 0.4, "protein": 2.1999999999999997, "carbs": 5.3}, "30": {"name": "lettuce", "energy": 15.0, "fat": 0.2, "protein": 1.4000000000000001, "carbs": 2.9000000000000004}, "31": {"name": "cucumbers", "energy": 10.0, "fat": 0.0, "protein": 1.0, "carbs": 2.0}, "32": {"name": "tomatoes", "energy": 34.0, "fat": 0.7000000000000001, "protein": 0.7000000000000001, "carbs": 6.800000000000001}, "33": {"name": "bell peppers", "energy": 40.0, "fat": 0.2, "protein": 2.0, "carbs": 9.0}, "34": {"name": "celery", "energy": 16.0, "fat": 0.2, "protein": 0.7000000000000001, "carbs": 3.4000000000000004}, "35": {"name": "blue cheese", "energy": 353.0, "fat": 28.999999999999996, "protein": 21.0, "carbs": 2.3}, "36": {"name": "spinach (raw)", "energy": 23.0, "fat": 0.4, "protein": 2.9000000000000004, "carbs": 3.5999999999999996}, "37": {"name": "cantaloupe", "energy": 34.0, "fat": 0.2, "protein": 0.8, "carbs": 8.0}, "38": {"name": "pineapple", "energy": 50.0, "fat": 0.1, "protein": 0.5, "carbs": 13.0}, "39": {"name": "sausage", "energy": 344.6, "fat": 27.3, "protein": 19.3, "carbs": 4.2}, "40": {"name": "raspberries", "energy": 53.0, "fat": 0.7000000000000001, "protein": 1.2, "carbs": 12.0}, "41": {"name": "blackberries", "energy": 43.0, "fat": 0.5, "protein": 1.4000000000000001, "carbs": 9.2}, "42": {"name": "avocado", "energy": 160.0, "fat": 15.0, "protein": 2.0, "carbs": 9.0}, "43": {"name": "green beans", "energy": 31.0, "fat": 0.1, "protein": 1.7999999999999998, "carbs": 7.000000000000001}, "44": {"name": "bean sprouts", "energy": 30.0, "fat": 0.2, "protein": 3.0, "carbs": 5.8999999999999995}, "45": {"name": "carrot", "energy": 41.0, "fat": 0.2, "protein": 0.8999999999999999, "carbs": 10.0}, "46": {"name": "mushroom", "energy": 22.0, "fat": 0.3, "protein": 3.1, "carbs": 3.3000000000000003}, "47": {"name": "corn", "energy": 96.0, "fat": 1.5, "protein": 3.4000000000000004, "carbs": 21.0}, "48": {"name": "ham", "energy": 145.0, "fat": 6.0, "protein": 21.0, "carbs": 1.5}, "49": {"name": "fish", "energy": 90.0, "fat": 13.0, "protein": 18.4, "carbs": 0.0}, "50": {"name": "tofu", "energy": 73.0, "fat": 4.8, "protein": 8.0, "carbs": 1.9}, "51": {"name": "shrimp", "energy": 99.0, "fat": 0.3, "protein": 24.0, "carbs": 0.2}, "52": {"name": "cheese", "energy": 401.99999999999994, "fat": 33.0, "protein": 25.0, "carbs": 1.3}, "53": {"name": "nuts", "energy": 607.0, "fat": 54.0, "protein": 20.0, "carbs": 21.0}, "54": {"name": "apple", "energy": 52.0, "fat": 0.2, "protein": 0.3, "carbs": 14.000000000000002}, "55": {"name": "banana", "energy": 89.0, "fat": 0.3, "protein": 1.0999999999999999, "carbs": 23.0}, "56": {"name": "kiwi", "energy": 61.0, "fat": 0.5, "protein": 1.0999999999999999, "carbs": 15.0}, "57": {"name": "lemon", "energy": 28.999999999999996, "fat": 0.3, "protein": 1.0999999999999999, "carbs": 9.0}, "58": {"name": "orange", "energy": 47.0, "fat": 0.1, "protein": 0.8999999999999999, "carbs": 12.0}, "59": {"name": "oatmeal", "energy": 68.0, "fat": 1.4000000000000001, "protein": 2.4, "carbs": 12.0}, "60": {"name": "tortilla", "energy": 218.00000000000003, "fat": 2.9000000000000004, "protein": 6.0, "carbs": 45.0}, "61": {"name": "potato chips", "energy": 536.0, "fat": 35.0, "protein": 7.000000000000001, "carbs": 53.0}, "62": {"name": "noodles", "energy": 138.0, "fat": 2.1, "protein": 4.5, "carbs": 25.0}, "63": {"name": "bean(seed) ", "energy": 140.0, "fat": 0.6, "protein": 9.0, "carbs": 24.0}, "64": {"name": "alcohol", "energy": 43.1, "fat": 0.0, "protein": 0.5, "carbs": 3.5999999999999996}, "65": {"name": "grape juice", "energy": 67.0, "fat": 0.4, "protein": 0.6, "carbs": 17.0}, "66": {"name": "ground beef", "energy": 332.1, "fat": 29.5, "protein": 14.2, "carbs": 0.0}, "67": {"name": "syrup", "energy": 260.0, "fat": 0.1, "protein": 0.0, "carbs": 67.0}, "68": {"name": "grapefruits", "energy": 42.0, "fat": 0.1, "protein": 0.8, "carbs": 11.0}, "69": {"name": "fruit punch", "energy": 45.0, "fat": 0.0, "protein": 0.0, "carbs": 12.5}, "70": {"name": "figs", "energy": 275.0, "fat": 0.0, "protein": 2.5, "carbs": 65.0}, "71": {"name": "macaroni and cheese", "energy": 164.0, "fat": 5.0, "protein": 7.000000000000001, "carbs": 23.0}, "72": {"name": "kale", "energy": 49.0, "fat": 0.7000000000000001, "protein": 3.3000000000000003, "carbs": 9.0}, "73": {"name": "radishes", "energy": 16.0, "fat": 0.1, "protein": 0.7000000000000001, "carbs": 3.4000000000000004}, "74": {"name": "pasta", "energy": 131.6, "fat": 1.0999999999999999, "protein": 5.1, "carbs": 24.8}, "75": {"name": "refried beans", "energy": 91.8, "fat": 1.2, "protein": 5.2, "carbs": 15.2}, "76": {"name": "brisket", "energy": 155.20000000000002, "fat": 7.199999999999999, "protein": 21.0, "carbs": 0.0}, "77": {"name": "almonds", "energy": 578.1, "fat": 49.5, "protein": 22.400000000000002, "carbs": 22.7}, "78": {"name": "protein powder", "energy": 400.0, "fat": 3.3000000000000003, "protein": 80.0, "carbs": 10.0}, "79": {"name": "okra", "energy": 32.800000000000004, "fat": 0.2, "protein": 1.9, "carbs": 7.199999999999999}, "80": {"name": "turkey bacon", "energy": 379.7, "fat": 28.1, "protein": 29.099999999999998, "carbs": 3.1}, "81": {"name": "pickles", "energy": 11.0, "fat": 0.2, "protein": 0.3, "carbs": 2.3}, "82": {"name": "pecans", "energy": 690.0, "fat": 72.0, "protein": 9.0, "carbs": 14.000000000000002}, "83": {"name": "muenster cheese", "energy": 367.5, "fat": 29.599999999999998, "protein": 23.9, "carbs": 1.0999999999999999}, "84": {"name": "brie cheese", "energy": 333.40000000000003, "fat": 28.000000000000004, "protein": 21.0, "carbs": 0.5}, "85": {"name": "apple juice", "energy": 46.0, "fat": 0.1, "protein": 0.1, "carbs": 11.0}, "86": {"name": "raisin bran", "energy": 314.0, "fat": 2.7, "protein": 8.0, "carbs": 77.0}, "87": {"name": "coleslaw", "energy": 152.29999999999998, "fat": 9.700000000000001, "protein": 1.0, "carbs": 14.799999999999999}, "88": {"name": "margarine", "energy": 717.0, "fat": 81.0, "protein": 0.2, "carbs": 0.7000000000000001}, "89": {"name": "spaghetti", "energy": 158.0, "fat": 0.8999999999999999, "protein": 6.0, "carbs": 31.0}, "90": {"name": "ground pork", "energy": 393.0, "fat": 33.0, "protein": 23.0, "carbs": 1.4000000000000001}, "91": {"name": "herring", "energy": 85.9, "fat": 5.8999999999999995, "protein": 4.7, "carbs": 3.2}, "92": {"name": "wine", "energy": 85.0, "fat": 0.0, "protein": 0.1, "carbs": 2.6}, "93": {"name": "alfalfa", "energy": 28.999999999999996, "fat": 0.7000000000000001, "protein": 4.0, "carbs": 3.8}, "94": {"name": "onions", "energy": 40.0, "fat": 0.1, "protein": 1.0999999999999999, "carbs": 9.0}, "95": {"name": "artichokes", "energy": 47.0, "fat": 0.2, "protein": 3.3000000000000003, "carbs": 11.0}, "96": {"name": "mussels", "energy": 171.8, "fat": 4.5, "protein": 23.799999999999997, "carbs": 7.000000000000001}, "97": {"name": "falafel", "energy": 334.1, "fat": 17.8, "protein": 13.3, "carbs": 30.7}, "98": {"name": "multigrain bread", "energy": 285.70000000000005, "fat": 9.2, "protein": 4.1000000000000005, "carbs": 49.0}, "99": {"name": "marshmallows", "energy": 318.0, "fat": 0.2, "protein": 1.7999999999999998, "carbs": 81.0}, "100": {"name": "oats", "energy": 389.0, "fat": 6.9, "protein": 16.900000000000002, "carbs": 66.3}, "101": {"name": "leeks", "energy": 61.0, "fat": 0.3, "protein": 1.5, "carbs": 14.000000000000002}, "102": {"name": "snow peas", "energy": 81.0, "fat": 0.4, "protein": 5.0, "carbs": 14.000000000000002}, "103": {"name": "pretzels", "energy": 380.3, "fat": 2.6, "protein": 10.100000000000001, "carbs": 80.4}, "104": {"name": "strudels", "energy": 318.2, "fat": 10.8, "protein": 5.0, "carbs": 50.0}, "105": {"name": "grilled chicken", "energy": 226.2, "fat": 14.899999999999999, "protein": 22.6, "carbs": 0.1}, "106": {"name": "half and half", "energy": 130.0, "fat": 12.0, "protein": 3.0, "carbs": 4.3}, "107": {"name": "mixed nuts", "energy": 606.9, "fat": 53.5, "protein": 20.599999999999998, "carbs": 21.099999999999998}, "108": {"name": "spring rolls", "energy": 154.29999999999998, "fat": 8.0, "protein": 16.2, "carbs": 4.3}, "109": {"name": "french toast", "energy": 229.2, "fat": 10.9, "protein": 7.8, "carbs": 24.8}, "110": {"name": "barbecue sauce", "energy": 172.0, "fat": 0.6, "protein": 0.8, "carbs": 41.0}, "111": {"name": "clams", "energy": 148.0, "fat": 2.0, "protein": 25.5, "carbs": 5.1}, "112": {"name": "honeydew melons", "energy": 36.0, "fat": 0.1, "protein": 0.5, "carbs": 9.0}, "113": {"name": "ketchup", "energy": 112.00000000000001, "fat": 0.2, "protein": 1.3, "carbs": 26.0}, "114": {"name": "polenta", "energy": 370.0, "fat": 1.7999999999999998, "protein": 7.000000000000001, "carbs": 79.0}, "115": {"name": "lemonade", "energy": 40.0, "fat": 0.0, "protein": 0.1, "carbs": 10.0}, "116": {"name": "mayonnaise", "energy": 680.0, "fat": 75.0, "protein": 1.0, "carbs": 0.6}, "117": {"name": "tacos", "energy": 225.99999999999997, "fat": 13.0, "protein": 8.799999999999999, "carbs": 20.1}, "118": {"name": "eggnog", "energy": 87.8, "fat": 4.2, "protein": 4.6, "carbs": 8.0}, "119": {"name": "tabouli", "energy": 85.0, "fat": 4.5, "protein": 2.1, "carbs": 10.7}, "120": {"name": "gelatin", "energy": 61.8, "fat": 0.0, "protein": 1.2, "carbs": 14.099999999999998}, "121": {"name": "watermelon", "energy": 30.0, "fat": 0.2, "protein": 0.6, "carbs": 7.6}, "122": {"name": "garlic", "energy": 149.0, "fat": 0.5, "protein": 6.4, "carbs": 33.0}, "123": {"name": "crawfish", "energy": 77.0, "fat": 1.0, "protein": 16.0, "carbs": 0.0}, "124": {"name": "walnuts", "energy": 653.3000000000001, "fat": 64.2, "protein": 15.1, "carbs": 13.900000000000002}, "125": {"name": "octopus", "energy": 163.7, "fat": 2.1, "protein": 29.7, "carbs": 4.3999999999999995}, "126": {"name": "mustard", "energy": 61.3, "fat": 3.3000000000000003, "protein": 3.6999999999999997, "carbs": 6.0}, "127": {"name": "pastries", "energy": 550.8, "fat": 38.4, "protein": 7.199999999999999, "carbs": 45.2}, "128": {"name": "egg whites", "energy": 52.0, "fat": 0.2, "protein": 10.0, "carbs": 0.7000000000000001}, "129": {"name": "raisins", "energy": 299.0, "fat": 0.5, "protein": 3.1, "carbs": 79.0}, "130": {"name": "rye bread", "energy": 258.59999999999997, "fat": 3.2, "protein": 8.6, "carbs": 48.199999999999996}, "131": {"name": "dark chocolate", "energy": 575.0, "fat": 46.0, "protein": 6.0, "carbs": 27.0}, "132": {"name": "croissants", "energy": 406.20000000000005, "fat": 21.2, "protein": 8.0, "carbs": 45.9}, "133": {"name": "shallots", "energy": 20.0, "fat": 0.2, "protein": 1.5, "carbs": 3.3000000000000003}, "134": {"name": "biscuits", "energy": 352.5, "fat": 16.2, "protein": 7.000000000000001, "carbs": 44.7}, "135": {"name": "tilapia", "energy": 128.8, "fat": 2.7, "protein": 26.1, "carbs": 0.0}, "136": {"name": "poached eggs", "energy": 142.5, "fat": 9.2, "protein": 12.5, "carbs": 0.8}, "137": {"name": "succotash", "energy": 99.0, "fat": 1.0, "protein": 5.0, "carbs": 20.0}, "138": {"name": "seafood", "energy": 204.4, "fat": 8.1, "protein": 28.499999999999996, "carbs": 1.7999999999999998}, "139": {"name": "egg rolls", "energy": 196.6, "fat": 4.5, "protein": 10.2, "carbs": 28.7}, "140": {"name": "caesar dressing", "energy": 44.1, "fat": 2.1, "protein": 3.2, "carbs": 4.3}, "141": {"name": "tuna salad", "energy": 187.0, "fat": 9.2, "protein": 16.2, "carbs": 9.2}, "142": {"name": "india pale ale beer", "energy": 55.60000000000001, "fat": 0.0, "protein": 0.3, "carbs": 1.7000000000000002}, "143": {"name": "veal", "energy": 172.0, "fat": 7.6, "protein": 24.4, "carbs": 0.0}, "144": {"name": "sorbet", "energy": 124.0, "fat": 0.5, "protein": 1.9, "carbs": 26.700000000000003}, "145": {"name": "bison", "energy": 179.0, "fat": 8.0, "protein": 25.0, "carbs": 0.0}, "146": {"name": "scallops", "energy": 105.89999999999999, "fat": 0.6, "protein": 20.0, "carbs": 5.8999999999999995}, "147": {"name": "turkey breast", "energy": 189.1, "fat": 7.1, "protein": 28.799999999999997, "carbs": 0.0}, "148": {"name": "parmesan cheese", "energy": 430.70000000000005, "fat": 28.599999999999998, "protein": 38.4, "carbs": 4.2}, "149": {"name": "sushi", "energy": 143.0, "fat": 0.4, "protein": 4.3, "carbs": 29.9}, "150": {"name": "swordfish", "energy": 171.8, "fat": 7.9, "protein": 23.400000000000002, "carbs": 0.0}, "151": {"name": "agave nectar", "energy": 310.0, "fat": 0.5, "protein": 0.1, "carbs": 76.0}, "152": {"name": "cabbage", "energy": 21.0, "fat": 0.5, "protein": 1.3, "carbs": 3.2}, "153": {"name": "bulgur", "energy": 342.0, "fat": 1.3, "protein": 12.0, "carbs": 76.0}, "154": {"name": "brown sugar", "energy": 380.0, "fat": 0.0, "protein": 0.1, "carbs": 98.0}, "155": {"name": "chicken thighs", "energy": 177.2, "fat": 8.3, "protein": 23.9, "carbs": 0.0}, "156": {"name": "paella", "energy": 183.4, "fat": 9.1, "protein": 10.4, "carbs": 14.099999999999998}, "157": {"name": "colby cheese", "energy": 394.0, "fat": 31.3, "protein": 24.3, "carbs": 2.5}, "158": {"name": "gumbo", "energy": 86.7, "fat": 3.3000000000000003, "protein": 4.1000000000000005, "carbs": 9.8}, "159": {"name": "apple cider", "energy": 46.2, "fat": 0.1, "protein": 0.1, "carbs": 11.3}, "160": {"name": "chow mein", "energy": 461.09999999999997, "fat": 18.4, "protein": 10.8, "carbs": 67.60000000000001}, "161": {"name": "olive oil", "energy": 884.0, "fat": 100.0, "protein": 0.0, "carbs": 0.0}, "162": {"name": "parsnips", "energy": 75.0, "fat": 0.3, "protein": 1.2, "carbs": 18.0}, "163": {"name": "kidney beans", "energy": 333.0, "fat": 0.8, "protein": 24.0, "carbs": 60.0}, "164": {"name": "chowders", "energy": 99.0, "fat": 6.2, "protein": 3.1, "carbs": 7.6}, "165": {"name": "skim milk", "energy": 34.0, "fat": 0.1, "protein": 3.4000000000000004, "carbs": 4.9}, "166": {"name": "grapefruit juice", "energy": 38.9, "fat": 0.1, "protein": 0.5, "carbs": 9.1}, "167": {"name": "tamales", "energy": 152.8, "fat": 6.0, "protein": 6.2, "carbs": 18.099999999999998}, "168": {"name": "lasagna", "energy": 135.0, "fat": 5.0, "protein": 7.199999999999999, "carbs": 15.4}, "169": {"name": "whole wheat bread", "energy": 246.8, "fat": 3.3000000000000003, "protein": 13.0, "carbs": 42.1}, "170": {"name": "gravy", "energy": 79.10000000000001, "fat": 5.8999999999999995, "protein": 2.0, "carbs": 5.2}, "171": {"name": "almond butter", "energy": 608.6, "fat": 55.50000000000001, "protein": 20.9, "carbs": 18.7}, "172": {"name": "cherry pie", "energy": 269.4, "fat": 12.2, "protein": 2.8000000000000003, "carbs": 38.7}, "173": {"name": "chestnuts", "energy": 130.8, "fat": 1.4000000000000001, "protein": 2.1, "carbs": 28.1}, "174": {"name": "bread crumbs", "energy": 395.0, "fat": 5.1, "protein": 13.200000000000001, "carbs": 71.3}, "175": {"name": "apple pie", "energy": 236.7, "fat": 11.0, "protein": 1.7999999999999998, "carbs": 34.5}, "176": {"name": "french dressing", "energy": 453.2, "fat": 44.2, "protein": 0.7000000000000001, "carbs": 15.6}, "177": {"name": "tempeh", "energy": 192.9, "fat": 10.9, "protein": 18.8, "carbs": 9.3}, "178": {"name": "pies", "energy": 236.7, "fat": 11.1, "protein": 1.9, "carbs": 34.5}, "179": {"name": "eggs", "energy": 155.5, "fat": 10.5, "protein": 12.5, "carbs": 1.2}, "180": {"name": "rice noodles", "energy": 109.00000000000001, "fat": 0.2, "protein": 0.8999999999999999, "carbs": 25.0}, "181": {"name": "milk shakes", "energy": 112.1, "fat": 2.9000000000000004, "protein": 3.9, "carbs": 18.0}, "182": {"name": "soy yogurt", "energy": 101.4, "fat": 1.9, "protein": 3.6999999999999997, "carbs": 17.299999999999997}, "183": {"name": "chips", "energy": 536.3000000000001, "fat": 35.0, "protein": 7.000000000000001, "carbs": 52.900000000000006}, "184": {"name": "ravioli", "energy": 77.10000000000001, "fat": 1.5, "protein": 2.5, "carbs": 13.8}, "185": {"name": "collards", "energy": 31.3, "fat": 0.6, "protein": 3.0, "carbs": 5.3}, "186": {"name": "green peas", "energy": 77.4, "fat": 0.4, "protein": 5.0, "carbs": 13.600000000000001}, "187": {"name": "chickpeas", "energy": 164.0, "fat": 2.6, "protein": 9.0, "carbs": 27.0}, "188": {"name": "carrot cake", "energy": 415.29999999999995, "fat": 9.9, "protein": 5.0, "carbs": 78.60000000000001}, "189": {"name": "vinegar", "energy": 0.0, "fat": 0.0, "protein": 0.0, "carbs": 0.0}, "190": {"name": "hamburgers", "energy": 295.0, "fat": 14.099999999999998, "protein": 16.8, "carbs": 24.099999999999998}, "191": {"name": "cheesecake", "energy": 321.0, "fat": 22.3, "protein": 5.7, "carbs": 25.3}, "192": {"name": "yam", "energy": 124.10000000000001, "fat": 0.2, "protein": 1.6, "carbs": 29.4}, "193": {"name": "hot dogs", "energy": 290.2, "fat": 25.5, "protein": 9.8, "carbs": 4.2}, "194": {"name": "fried rice", "energy": 157.7, "fat": 2.1999999999999997, "protein": 4.7, "carbs": 29.9}, "195": {"name": "wafers", "energy": 433.4, "fat": 14.399999999999999, "protein": 6.800000000000001, "carbs": 72.6}, "196": {"name": "cod", "energy": 84.7, "fat": 0.5, "protein": 18.9, "carbs": 0.0}, "197": {"name": "salads", "energy": 152.29999999999998, "fat": 9.700000000000001, "protein": 1.0, "carbs": 14.799999999999999}, "198": {"name": "breadsticks", "energy": 408.3, "fat": 9.2, "protein": 12.3, "carbs": 69.1}, "199": {"name": "swiss cheese", "energy": 379.9, "fat": 28.199999999999996, "protein": 27.6, "carbs": 5.2}, "200": {"name": "buttermilk", "energy": 40.2, "fat": 0.8999999999999999, "protein": 3.3000000000000003, "carbs": 4.8}, "201": {"name": "blueberries", "energy": 57.199999999999996, "fat": 0.3, "protein": 0.7000000000000001, "carbs": 14.399999999999999}, "202": {"name": "enchiladas", "energy": 168.1, "fat": 9.2, "protein": 6.1, "carbs": 15.8}, "203": {"name": "chili", "energy": 40.0, "fat": 0.4, "protein": 1.7999999999999998, "carbs": 8.9}, "204": {"name": "pork chops", "energy": 230.79999999999998, "fat": 14.099999999999998, "protein": 23.9, "carbs": 0.0}, "205": {"name": "corn on the cob", "energy": 106.1, "fat": 2.4, "protein": 3.1, "carbs": 22.0}, "206": {"name": "muffins", "energy": 377.0, "fat": 15.9, "protein": 4.6, "carbs": 53.300000000000004}, "207": {"name": "fried chicken", "energy": 246.1, "fat": 11.799999999999999, "protein": 30.4, "carbs": 1.9}, "208": {"name": "ice cream cones", "energy": 418.9, "fat": 7.1, "protein": 7.9, "carbs": 79.0}, "209": {"name": "pastrami", "energy": 145.79999999999998, "fat": 5.800000000000001, "protein": 21.6, "carbs": 0.4}, "210": {"name": "chocolate milk", "energy": 83.1, "fat": 3.4000000000000004, "protein": 3.2, "carbs": 10.2}, "211": {"name": "plums", "energy": 45.7, "fat": 0.3, "protein": 0.7000000000000001, "carbs": 11.5}, "212": {"name": "burgers", "energy": 295.0, "fat": 14.099999999999998, "protein": 16.8, "carbs": 24.099999999999998}, "213": {"name": "pears", "energy": 57.199999999999996, "fat": 0.1, "protein": 0.4, "carbs": 15.2}, "214": {"name": "seeds", "energy": 558.1999999999999, "fat": 49.2, "protein": 30.9, "carbs": 10.8}, "215": {"name": "squid", "energy": 175.1, "fat": 7.000000000000001, "protein": 17.8, "carbs": 8.1}, "216": {"name": "tostadas", "energy": 148.0, "fat": 7.8, "protein": 7.1, "carbs": 13.200000000000001}, "217": {"name": "lamb", "energy": 294.09999999999997, "fat": 21.099999999999998, "protein": 24.7, "carbs": 0.0}, "218": {"name": "brazil nuts", "energy": 657.4, "fat": 66.3, "protein": 14.2, "carbs": 12.1}, "219": {"name": "macaroni", "energy": 372.5, "fat": 1.5, "protein": 12.7, "carbs": 75.4}, "220": {"name": "pita bread", "energy": 275.0, "fat": 1.0999999999999999, "protein": 8.799999999999999, "carbs": 55.800000000000004}, "221": {"name": "vegetable oil", "energy": 886.4000000000001, "fat": 100.0, "protein": 0.0, "carbs": 0.0}, "222": {"name": "pine nuts", "energy": 664.6, "fat": 68.5, "protein": 13.200000000000001, "carbs": 12.6}, "223": {"name": "macadamia nuts", "energy": 718.8, "fat": 75.0, "protein": 7.9, "carbs": 13.900000000000002}, "224": {"name": "potato salad", "energy": 142.9, "fat": 8.0, "protein": 2.8000000000000003, "carbs": 11.1}, "225": {"name": "veggie burgers", "energy": 177.1, "fat": 6.1, "protein": 15.9, "carbs": 14.099999999999998}, "226": {"name": "pasta sauce", "energy": 29.2, "fat": 0.2, "protein": 1.3, "carbs": 6.9}, "227": {"name": "calamari", "energy": 175.1, "fat": 7.000000000000001, "protein": 17.8, "carbs": 8.1}, "228": {"name": "cornmeal", "energy": 370.0, "fat": 1.7999999999999998, "protein": 7.000000000000001, "carbs": 79.3}, "229": {"name": "bologna", "energy": 245.2, "fat": 20.599999999999998, "protein": 15.1, "carbs": 0.7000000000000001}, "230": {"name": "frostings", "energy": 421.7, "fat": 16.3, "protein": 0.0, "carbs": 68.60000000000001}, "231": {"name": "deprecated", "energy": 90.5, "fat": 0.3, "protein": 1.0999999999999999, "carbs": 23.400000000000002}, "232": {"name": "oysters", "energy": 198.9, "fat": 12.8, "protein": 8.799999999999999, "carbs": 11.700000000000001}, "233": {"name": "vodka", "energy": 230.6, "fat": 0.0, "protein": 0.0, "carbs": 0.0}, "234": {"name": "smoothies", "energy": 38.3, "fat": 0.0, "protein": 1.3, "carbs": 8.4}, "235": {"name": "pecan pie", "energy": 412.3, "fat": 21.8, "protein": 4.9, "carbs": 52.5}, "236": {"name": "roast beef", "energy": 169.79999999999998, "fat": 5.8999999999999995, "protein": 29.099999999999998, "carbs": 0.0}, "237": {"name": "hot chocolate", "energy": 77.0, "fat": 2.3, "protein": 3.5000000000000004, "carbs": 10.9}, "238": {"name": "hominy", "energy": 72.1, "fat": 0.8999999999999999, "protein": 1.5, "carbs": 14.299999999999999}, "239": {"name": "custard", "energy": 117.5, "fat": 4.0, "protein": 4.0, "carbs": 17.2}, "240": {"name": "smoked salmon", "energy": 117.30000000000001, "fat": 4.3, "protein": 18.4, "carbs": 0.0}, "241": {"name": "scones", "energy": 352.5, "fat": 16.2, "protein": 7.000000000000001, "carbs": 44.7}, "242": {"name": "tortellini", "energy": 307.2, "fat": 7.199999999999999, "protein": 13.8, "carbs": 47.0}, "243": {"name": "mozzarella cheese", "energy": 277.59999999999997, "fat": 17.1, "protein": 28.000000000000004, "carbs": 3.2}, "244": {"name": "chicken breast", "energy": 165.2, "fat": 3.5999999999999996, "protein": 31.1, "carbs": 0.0}, "245": {"name": "wheat bread", "energy": 246.8, "fat": 3.3000000000000003, "protein": 13.0, "carbs": 42.1}, "246": {"name": "baked beans", "energy": 152.89999999999998, "fat": 5.0, "protein": 5.7, "carbs": 21.6}, "247": {"name": "blueberry pie", "energy": 245.6, "fat": 11.899999999999999, "protein": 2.7, "carbs": 33.0}, "248": {"name": "hard boiled eggs", "energy": 155.5, "fat": 10.5, "protein": 12.5, "carbs": 1.2}, "249": {"name": "cashews", "energy": 553.4, "fat": 43.2, "protein": 17.8, "carbs": 30.9}, "250": {"name": "rolls", "energy": 308.9, "fat": 6.5, "protein": 10.7, "carbs": 52.1}, "251": {"name": "tortilla chips", "energy": 464.20000000000005, "fat": 15.299999999999999, "protein": 8.6, "carbs": 73.7}, "252": {"name": "broth", "energy": 264.0, "fat": 14.7, "protein": 16.5, "carbs": 18.5}, "253": {"name": "tahini", "energy": 595.6, "fat": 53.5, "protein": 17.0, "carbs": 21.099999999999998}, "254": {"name": "mashed potatoes", "energy": 90.7, "fat": 2.9000000000000004, "protein": 1.7000000000000002, "carbs": 15.1}, "255": {"name": "nougat", "energy": 399.0, "fat": 1.6, "protein": 3.4000000000000004, "carbs": 92.4}, "256": {"name": "fish oil", "energy": 903.3, "fat": 101.0, "protein": 0.0, "carbs": 0.0}, "257": {"name": "brownies", "energy": 466.09999999999997, "fat": 28.799999999999997, "protein": 6.2, "carbs": 49.8}, "258": {"name": "popcorn", "energy": 374.5, "fat": 4.3, "protein": 11.0, "carbs": 74.0}, "259": {"name": "corned beef", "energy": 250.8, "fat": 19.0, "protein": 17.9, "carbs": 0.5}, "260": {"name": "iced tea", "energy": 37.3, "fat": 0.1, "protein": 0.0, "carbs": 9.3}, "261": {"name": "pumpkins", "energy": 25.900000000000002, "fat": 0.1, "protein": 1.0, "carbs": 6.5}, "262": {"name": "yogurt", "energy": 58.9, "fat": 0.4, "protein": 10.0, "carbs": 3.5999999999999996}, "263": {"name": "mousse", "energy": 224.9, "fat": 16.0, "protein": 4.1000000000000005, "carbs": 16.0}, "264": {"name": "bagels", "energy": 250.0, "fat": 1.5, "protein": 10.100000000000001, "carbs": 49.0}, "265": {"name": "sardines", "energy": 203.10000000000002, "fat": 11.1, "protein": 24.3, "carbs": 0.0}, "266": {"name": "pot pies", "energy": 198.2, "fat": 11.3, "protein": 4.9, "carbs": 18.9}, "267": {"name": "coconuts", "energy": 353.7, "fat": 33.300000000000004, "protein": 3.3000000000000003, "carbs": 15.2}, "268": {"name": "soft serve ice creams", "energy": 223.4, "fat": 13.0, "protein": 4.1000000000000005, "carbs": 22.2}, "269": {"name": "onion rings", "energy": 410.59999999999997, "fat": 25.3, "protein": 3.9, "carbs": 43.8}, "270": {"name": "cocoa", "energy": 223.70000000000002, "fat": 13.5, "protein": 19.8, "carbs": 57.3}, "271": {"name": "peaches", "energy": 39.300000000000004, "fat": 0.3, "protein": 0.8999999999999999, "carbs": 9.5}, "272": {"name": "cupcakes", "energy": 305.5, "fat": 3.5999999999999996, "protein": 4.2, "carbs": 67.2}, "273": {"name": "sandwiches", "energy": 232.9, "fat": 13.0, "protein": 11.0, "carbs": 17.9}, "274": {"name": "trail mix", "energy": 462.0, "fat": 28.599999999999998, "protein": 13.900000000000002, "carbs": 45.4}, "275": {"name": "frozen yogurt", "energy": 163.3, "fat": 5.8999999999999995, "protein": 4.1000000000000005, "carbs": 24.5}, "276": {"name": "chocolate cake", "energy": 370.7, "fat": 15.0, "protein": 5.2, "carbs": 53.400000000000006}, "277": {"name": "chimichangas", "energy": 244.1, "fat": 11.200000000000001, "protein": 11.200000000000001, "carbs": 24.9}, "278": {"name": "beer", "energy": 43.1, "fat": 0.0, "protein": 0.5, "carbs": 3.5999999999999996}, "279": {"name": "omelets", "energy": 154.0, "fat": 11.700000000000001, "protein": 10.4, "carbs": 0.6}, "280": {"name": "souffle", "energy": 169.1, "fat": 13.0, "protein": 7.9, "carbs": 6.0}, "281": {"name": "edamame", "energy": 122.0, "fat": 5.1, "protein": 11.0, "carbs": 9.8}, "282": {"name": "energy drinks", "energy": 45.9, "fat": 0.1, "protein": 0.3, "carbs": 12.0}, "283": {"name": "salad dressing", "energy": 479.90000000000003, "fat": 46.7, "protein": 0.8, "carbs": 16.5}, "284": {"name": "ribs", "energy": 351.3, "fat": 28.1, "protein": 22.7, "carbs": 0.0}, "285": {"name": "trout", "energy": 140.9, "fat": 6.0, "protein": 20.1, "carbs": 0.0}, "286": {"name": "romano cheese", "energy": 387.40000000000003, "fat": 27.3, "protein": 31.8, "carbs": 3.5999999999999996}, "287": {"name": "toast", "energy": 313.09999999999997, "fat": 4.2, "protein": 13.0, "carbs": 55.50000000000001}, "288": {"name": "empanadas", "energy": 335.5, "fat": 18.0, "protein": 11.1, "carbs": 31.2}, "289": {"name": "ranch dressing", "energy": 483.7, "fat": 50.5, "protein": 1.0, "carbs": 6.800000000000001}, "290": {"name": "cheddar cheese", "energy": 401.90000000000003, "fat": 33.0, "protein": 24.8, "carbs": 1.3}, "291": {"name": "salt", "energy": 0.0, "fat": 0.0, "protein": 0.0, "carbs": 0.0}, "292": {"name": "spreads", "energy": 235.70000000000002, "fat": 17.1, "protein": 7.9, "carbs": 12.0}, "293": {"name": "sandwich cookies", "energy": 469.7, "fat": 20.200000000000003, "protein": 5.6000000000000005, "carbs": 70.39999999999999}, "294": {"name": "granola", "energy": 469.29999999999995, "fat": 20.4, "protein": 10.0, "carbs": 64.7}, "295": {"name": "provolone cheese", "energy": 351.90000000000003, "fat": 26.6, "protein": 25.3, "carbs": 2.1999999999999997}, "296": {"name": "sundaes", "energy": 179.9, "fat": 5.3, "protein": 3.6999999999999997, "carbs": 30.2}, "297": {"name": "pepperoni", "energy": 493.6, "fat": 43.8, "protein": 23.1, "carbs": 0.0}, "298": {"name": "focaccia", "energy": 249.6, "fat": 7.9, "protein": 8.9, "carbs": 35.5}, "299": {"name": "soy milk", "energy": 53.400000000000006, "fat": 1.7000000000000002, "protein": 3.3000000000000003, "carbs": 6.1}, "300": {"name": "egg yolks", "energy": 322.8, "fat": 26.700000000000003, "protein": 15.9, "carbs": 3.5999999999999996}, "301": {"name": "english muffins", "energy": 235.5, "fat": 1.7999999999999998, "protein": 7.8, "carbs": 45.800000000000004}, "302": {"name": "pie crust", "energy": 236.7, "fat": 11.0, "protein": 1.7999999999999998, "carbs": 34.5}, "303": {"name": "chocolate chip cookies", "energy": 487.4, "fat": 28.1, "protein": 5.800000000000001, "carbs": 56.89999999999999}, "304": {"name": "puddings", "energy": 119.7, "fat": 3.2, "protein": 3.2, "carbs": 19.8}, "305": {"name": "fudge", "energy": 411.4, "fat": 10.299999999999999, "protein": 2.4, "carbs": 76.2}, "306": {"name": "croutons", "energy": 408.1, "fat": 6.7, "protein": 12.0, "carbs": 72.3}, "307": {"name": "stuffing", "energy": 385.40000000000003, "fat": 3.5000000000000004, "protein": 11.0, "carbs": 76.7}, "308": {"name": "lamb chops", "energy": 294.09999999999997, "fat": 21.099999999999998, "protein": 24.7, "carbs": 0.0}, "309": {"name": "rum", "energy": 231.3, "fat": 0.0, "protein": 0.0, "carbs": 0.0}, "310": {"name": "corn chips", "energy": 518.0, "fat": 28.1, "protein": 6.0, "carbs": 63.2}, "311": {"name": "granola bars", "energy": 471.2, "fat": 20.0, "protein": 10.0, "carbs": 65.3}, "312": {"name": "pepper", "energy": 40.0, "fat": 0.2, "protein": 2.0, "carbs": 9.3}, "313": {"name": "peanut butter", "energy": 589.5, "fat": 50.3, "protein": 25.1, "carbs": 19.400000000000002}, "314": {"name": "sourdough bread", "energy": 288.9, "fat": 1.7999999999999998, "protein": 11.899999999999999, "carbs": 56.2}, "315": {"name": "corn dogs", "energy": 262.9, "fat": 10.9, "protein": 9.9, "carbs": 32.0}, "316": {"name": "roast chicken", "energy": 223.70000000000002, "fat": 13.0, "protein": 23.5, "carbs": 0.0}, "317": {"name": "flounder", "energy": 70.3, "fat": 1.9, "protein": 12.4, "carbs": 0.0}, "318": {"name": "flour", "energy": 364.1, "fat": 1.0, "protein": 10.2, "carbs": 76.0}, "319": {"name": "feta cheese", "energy": 264.1, "fat": 21.099999999999998, "protein": 13.8, "carbs": 4.2}, "320": {"name": "black beans", "energy": 132.0, "fat": 0.5, "protein": 8.9, "carbs": 23.7}, "321": {"name": "water", "energy": 0.0, "fat": 0.0, "protein": 0.0, "carbs": 0.0}, "322": {"name": "garlic bread", "energy": 350.09999999999997, "fat": 16.7, "protein": 8.200000000000001, "carbs": 42.1}, "323": {"name": "salami", "energy": 334.7, "fat": 26.0, "protein": 22.0, "carbs": 2.4}, "324": {"name": "chocolate", "energy": 546.1, "fat": 31.4, "protein": 4.9, "carbs": 60.699999999999996}, "325": {"name": "nectarines", "energy": 44.2, "fat": 0.3, "protein": 1.0999999999999999, "carbs": 10.7}, "326": {"name": "chicken soup", "energy": 35.5, "fat": 1.2, "protein": 2.5, "carbs": 3.4000000000000004}, "327": {"name": "root beer", "energy": 41.5, "fat": 0.0, "protein": 0.0, "carbs": 10.8}, "328": {"name": "sugar", "energy": 388.0, "fat": 0.0, "protein": 0.0, "carbs": 100.0}, "329": {"name": "pate nutrition", "energy": 318.2, "fat": 28.1, "protein": 14.099999999999998, "carbs": 1.5}, "330": {"name": "haddock", "energy": 90.4, "fat": 0.6, "protein": 20.0, "carbs": 0.0}, "331": {"name": "pancakes", "energy": 226.6, "fat": 9.6, "protein": 6.3, "carbs": 28.4}, "332": {"name": "salmon", "energy": 178.0, "fat": 8.0, "protein": 24.0, "carbs": 0.0}, "333": {"name": "potato bread", "energy": 265.8, "fat": 3.1, "protein": 12.8, "carbs": 46.9}, "334": {"name": "white bread", "energy": 264.9, "fat": 3.2, "protein": 9.1, "carbs": 48.9}, "335": {"name": "eggplant", "energy": 24.8, "fat": 0.2, "protein": 1.0, "carbs": 5.8999999999999995}, "336": {"name": "peanuts", "energy": 567.5, "fat": 49.2, "protein": 25.3, "carbs": 16.1}, "337": {"name": "waffles", "energy": 290.3, "fat": 14.299999999999999, "protein": 7.9, "carbs": 32.7}, "338": {"name": "vinaigrette", "energy": 465.5, "fat": 51.800000000000004, "protein": 0.0, "carbs": 2.6}, "339": {"name": "grits", "energy": 59.0, "fat": 0.2, "protein": 1.4000000000000001, "carbs": 13.0}, "340": {"name": "lo mein", "energy": 122.0, "fat": 2.4, "protein": 4.8, "carbs": 20.0}, "341": {"name": "cream", "energy": 336.3, "fat": 36.6, "protein": 2.8000000000000003, "carbs": 2.7}, "342": {"name": "turnips", "energy": 21.7, "fat": 0.1, "protein": 0.7000000000000001, "carbs": 5.1}, "343": {"name": "cranberry juice", "energy": 45.300000000000004, "fat": 0.1, "protein": 0.3, "carbs": 11.1}, "344": {"name": "peach", "energy": 38.800000000000004, "fat": 0.3, "protein": 0.8999999999999999, "carbs": 9.5}, "345": {"name": "roast pork", "energy": 291.8, "fat": 21.2, "protein": 23.5, "carbs": 0.0}, "346": {"name": "turnover", "energy": 178.1, "fat": 8.1, "protein": 1.5, "carbs": 25.6}, "347": {"name": "baby carrots", "energy": 41.0, "fat": 0.2, "protein": 0.8999999999999999, "carbs": 10.0}, "348": {"name": "egg salad", "energy": 212.0, "fat": 18.4, "protein": 8.1, "carbs": 2.4}, "349": {"name": "mangos", "energy": 60.6, "fat": 0.4, "protein": 0.8, "carbs": 15.0}, "350": {"name": "miso soup", "energy": 24.5, "fat": 1.2, "protein": 2.4, "carbs": 1.5}, "351": {"name": "mackerel", "energy": 262.0, "fat": 18.0, "protein": 24.0, "carbs": 0.0}, "352": {"name": "calzones", "energy": 308.0, "fat": 21.0, "protein": 16.0, "carbs": 13.0}, "353": {"name": "burritos", "energy": 180.0, "fat": 6.800000000000001, "protein": 7.000000000000001, "carbs": 23.0}, "354": {"name": "soy nuts", "energy": 449.0, "fat": 22.0, "protein": 43.0, "carbs": 28.999999999999996}, "355": {"name": "crackers", "energy": 509.99999999999994, "fat": 26.0, "protein": 6.6000000000000005, "carbs": 61.0}, "356": {"name": "french fries", "energy": 312.0, "fat": 15.0, "protein": 3.4000000000000004, "carbs": 41.0}, "357": {"name": "lentils", "energy": 113.99999999999999, "fat": 0.4, "protein": 9.0, "carbs": 20.0}, "358": {"name": "mixed vegetables", "energy": 32.0, "fat": 0.3, "protein": 1.7000000000000002, "carbs": 6.9}, "359": {"name": "honey", "energy": 304.0, "fat": 0.0, "protein": 0.3, "carbs": 82.0}, "360": {"name": "risotto", "energy": 122.0, "fat": 3.9, "protein": 4.3, "carbs": 16.0}, "361": {"name": "roast turkey", "energy": 189.0, "fat": 7.3999999999999995, "protein": 28.999999999999996, "carbs": 0.1}, "362": {"name": "ice creams", "energy": 206.99999999999997, "fat": 11.0, "protein": 3.5000000000000004, "carbs": 24.0}, "363": {"name": "meatloaf", "energy": 181.0, "fat": 9.9, "protein": 15.0, "carbs": 7.7}, "364": {"name": "sunflower seeds", "energy": 546.0, "fat": 50.0, "protein": 19.0, "carbs": 15.0}, "365": {"name": "quiche", "energy": 371.0, "fat": 31.0, "protein": 13.0, "carbs": 9.9}, "366": {"name": "sauerkraut", "energy": 19.0, "fat": 0.1, "protein": 0.8999999999999999, "carbs": 4.3}, "367": {"name": "lime", "energy": 30.0, "fat": 0.2, "protein": 0.7000000000000001, "carbs": 10.5}, "368": {"name": "donuts", "energy": 421.0, "fat": 23.0, "protein": 6.1, "carbs": 48.0}, "369": {"name": "fritters", "energy": 276.0, "fat": 20.0, "protein": 4.6, "carbs": 20.0}, "370": {"name": "mahi mahi", "energy": 109.00000000000001, "fat": 0.8999999999999999, "protein": 24.0, "carbs": 0.0}, "371": {"name": "dumplings", "energy": 229.99999999999997, "fat": 5.4, "protein": 6.2, "carbs": 39.0}, "372": {"name": "chilaquiles", "energy": 195.0, "fat": 12.0, "protein": 8.9, "carbs": 12.0}, "373": {"name": "snapper", "energy": 128.0, "fat": 1.7000000000000002, "protein": 26.0, "carbs": 0.0}, "374": {"name": "peas", "energy": 84.0, "fat": 0.2, "protein": 5.4, "carbs": 16.0}, "375": {"name": "fruit salad", "energy": 59.0, "fat": 0.3, "protein": 0.8, "carbs": 15.0}, "376": {"name": "naan", "energy": 291.0, "fat": 5.7, "protein": 9.6, "carbs": 50.0}, "377": {"name": "quinoa", "energy": 120.0, "fat": 1.9, "protein": 4.3999999999999995, "carbs": 21.0}, "378": {"name": "catfish", "energy": 144.0, "fat": 7.199999999999999, "protein": 18.0, "carbs": 0.0}, "379": {"name": "lima beans", "energy": 114.99999999999999, "fat": 0.4, "protein": 7.8, "carbs": 21.0}, "380": {"name": "pizza", "energy": 266.0, "fat": 9.700000000000001, "protein": 11.0, "carbs": 33.0}, "381": {"name": "gouda cheese", "energy": 356.0, "fat": 27.0, "protein": 25.0, "carbs": 2.1999999999999997}, "382": {"name": "cheeseburgers", "energy": 269.0, "fat": 14.000000000000002, "protein": 15.0, "carbs": 20.0}, "383": {"name": "italian dressing", "energy": 231.0, "fat": 20.5, "protein": 0.4, "carbs": 11.899999999999999}, "384": {"name": "coffee", "energy": 0.0, "fat": 0.0, "protein": 0.0, "carbs": 0.0}, "385": {"name": "curries", "energy": 104.0, "fat": 4.6, "protein": 12.0, "carbs": 3.2}, "386": {"name": "eel", "energy": 236.0, "fat": 15.0, "protein": 24.0, "carbs": 0.0}, "387": {"name": "candies", "energy": 394.0, "fat": 0.2, "protein": 0.0, "carbs": 98.0}, "388": {"name": "fried eggs", "energy": 196.0, "fat": 15.0, "protein": 14.000000000000002, "carbs": 0.8}, "389": {"name": "chicken drumsticks", "energy": 184.0, "fat": 9.0, "protein": 24.0, "carbs": 0.0}, "390": {"name": "margarita", "energy": 100.0, "fat": 0.0, "protein": 0.1, "carbs": 9.9}, "391": {"name": "cobbler", "energy": 199.0, "fat": 6.3, "protein": 2.0, "carbs": 35.0}, "392": {"name": "pepperoni pizza", "energy": 282.0, "fat": 12.0, "protein": 12.0, "carbs": 32.0}, "393": {"name": "teriyaki sauce", "energy": 89.0, "fat": 0.0, "protein": 5.8999999999999995, "carbs": 16.0}, "394": {"name": "gorgonzola cheese", "energy": 353.0, "fat": 28.999999999999996, "protein": 21.0, "carbs": 2.3}, "395": {"name": "string cheese", "energy": 300.0, "fat": 22.0, "protein": 22.0, "carbs": 2.1999999999999997}, "396": {"name": "wheat beer", "energy": 43.0, "fat": 0.0, "protein": 0.5, "carbs": 3.5999999999999996}, "397": {"name": "gyros", "energy": 185.0, "fat": 10.0, "protein": 12.0, "carbs": 11.0}, "398": {"name": "champagne", "energy": 82.0, "fat": 0.0, "protein": 0.1, "carbs": 2.6}, "399": {"name": "raisin bread", "energy": 274.0, "fat": 4.3999999999999995, "protein": 7.9, "carbs": 52.0}, "400": {"name": "cornbread", "energy": 266.0, "fat": 7.1, "protein": 6.7, "carbs": 44.0}, "401": {"name": "wraps", "energy": 325.0, "fat": 7.1, "protein": 8.7, "carbs": 56.00000000000001}, "402": {"name": "tuna", "energy": 130.0, "fat": 0.6, "protein": 28.999999999999996, "carbs": 0.0}, "403": {"name": "fruit cocktail", "energy": 73.0, "fat": 0.1, "protein": 0.4, "carbs": 19.0}, "404": {"name": "potato skins", "energy": 340.0, "fat": 26.0, "protein": 13.0, "carbs": 15.0}, "405": {"name": "seaweed", "energy": 38.0, "fat": 0.3, "protein": 2.4, "carbs": 8.4}, "406": {"name": "sherbet", "energy": 144.0, "fat": 2.0, "protein": 1.0999999999999999, "carbs": 30.0}, "407": {"name": "horseradish", "energy": 48.0, "fat": 0.7000000000000001, "protein": 1.2, "carbs": 11.0}, "408": {"name": "jambalaya", "energy": 156.0, "fat": 7.3999999999999995, "protein": 7.1, "carbs": 15.0}, "409": {"name": "greek salad", "energy": 112.99999999999999, "fat": 9.4, "protein": 3.2, "carbs": 4.7}, "410": {"name": "goulash", "energy": 107.0, "fat": 3.9, "protein": 7.6, "carbs": 10.0}, "411": {"name": "stews", "energy": 106.0, "fat": 3.2, "protein": 11.0, "carbs": 8.200000000000001}, "412": {"name": "havarti cheese", "energy": 371.0, "fat": 30.0, "protein": 23.0, "carbs": 2.8000000000000003}, "413": {"name": "pilaf", "energy": 159.20000000000002, "fat": 4.9, "protein": 2.5, "carbs": 25.6}, "414": {"name": "chutney", "energy": 120.0, "fat": 8.0, "protein": 5.0, "carbs": 10.0}, "415": {"name": "cereal", "energy": 376.0, "fat": 6.7, "protein": 12.0, "carbs": 73.0}, "416": {"name": "ground chicken", "energy": 189.0, "fat": 11.0, "protein": 23.0, "carbs": 0.0}, "417": {"name": "fajitas", "energy": 200.0, "fat": 7.9, "protein": 14.000000000000002, "carbs": 18.0}, "418": {"name": "chicken wings", "energy": 328.0, "fat": 24.0, "protein": 17.0, "carbs": 9.8}, "419": {"name": "hard cider", "energy": 56.00000000000001, "fat": 0.0, "protein": 0.0, "carbs": 5.8999999999999995}, "420": {"name": "ice pop", "energy": 79.0, "fat": 0.2, "protein": 0.0, "carbs": 19.0}, "421": {"name": "ground turkey", "energy": 258.0, "fat": 17.0, "protein": 25.0, "carbs": 0.0}, "422": {"name": "crab", "energy": 83.0, "fat": 0.7000000000000001, "protein": 18.0, "carbs": 0.0}, "423": {"name": "plate only", "energy": 0.0, "fat": 0.0, "protein": 0.0, "carbs": 0.0}, "424": {"name": "prunes", "energy": 240.0, "fat": 0.4, "protein": 2.1999999999999997, "carbs": 64.0}, "425": {"name": "goat cheese", "energy": 264.0, "fat": 21.0, "protein": 19.0, "carbs": 0.0}, "426": {"name": "tomato soup", "energy": 35.0, "fat": 0.2, "protein": 0.7000000000000001, "carbs": 7.3999999999999995}, "427": {"name": "muesli", "energy": 352.0, "fat": 3.3000000000000003, "protein": 11.0, "carbs": 76.0}, "428": {"name": "white wine", "energy": 82.0, "fat": 0.0, "protein": 0.1, "carbs": 2.6}, "429": {"name": "gnocchi", "energy": 200.99999999999997, "fat": 1.2, "protein": 6.0, "carbs": 41.0}, "430": {"name": "apricots", "energy": 48.0, "fat": 0.4, "protein": 1.4000000000000001, "carbs": 11.0}, "431": {"name": "licorice", "energy": 350.0, "fat": 2.3, "protein": 2.6, "carbs": 80.0}, "432": {"name": "red potatoes", "energy": 89.0, "fat": 0.1, "protein": 2.3, "carbs": 20.0}, "433": {"name": "roasted potatoes", "energy": 141.0, "fat": 6.800000000000001, "protein": 2.1, "carbs": 18.0}, "434": {"name": "sour cream", "energy": 198.0, "fat": 19.0, "protein": 2.4, "carbs": 4.6}, "435": {"name": "jerky", "energy": 409.99999999999994, "fat": 26.0, "protein": 33.0, "carbs": 11.0}, "436": {"name": "coffee creamer", "energy": 132.0, "fat": 9.9, "protein": 1.0, "carbs": 11.200000000000001}, "437": {"name": "sweet potato", "energy": 76.0, "fat": 0.0, "protein": 1.0, "carbs": 18.0}, "438": {"name": "chicken nuggets", "energy": 307.0, "fat": 20.0, "protein": 16.0, "carbs": 15.0}, "439": {"name": "anchovies", "energy": 210.0, "fat": 9.700000000000001, "protein": 28.999999999999996, "carbs": 0.0}, "440": {"name": "grapes", "energy": 69.0, "fat": 0.2, "protein": 0.7000000000000001, "carbs": 18.0}, "441": {"name": "butter", "energy": 717.0, "fat": 81.0, "protein": 0.8, "carbs": 0.1}, "442": {"name": "hummus", "energy": 166.0, "fat": 9.6, "protein": 7.9, "carbs": 14.000000000000002}, "443": {"name": "crispbread", "energy": 366.0, "fat": 1.3, "protein": 7.9, "carbs": 82.0}, "444": {"name": "dates", "energy": 282.0, "fat": 0.4, "protein": 2.5, "carbs": 75.0}, "445": {"name": "papayas", "energy": 43.0, "fat": 0.3, "protein": 0.5, "carbs": 11.0}, "446": {"name": "stout beer", "energy": 45.0, "fat": 0.0, "protein": 0.2, "carbs": 1.5}, "447": {"name": "nutrition bars", "energy": 400.0, "fat": 9.8, "protein": 38.0, "carbs": 40.0}, "448": {"name": "jalapenos", "energy": 28.999999999999996, "fat": 0.4, "protein": 0.8999999999999999, "carbs": 6.5}, "449": {"name": "cappuccino", "energy": 42.0, "fat": 1.6, "protein": 2.6, "carbs": 4.2}, "450": {"name": "buns", "energy": 279.0, "fat": 3.9, "protein": 9.8, "carbs": 50.0}, "451": {"name": "taco shells", "energy": 476.0, "fat": 22.0, "protein": 6.4, "carbs": 63.0}, "452": {"name": "maple syrup", "energy": 260.0, "fat": 0.1, "protein": 0.1, "carbs": 65.0}, "453": {"name": "deprecated", "energy": 52.0, "fat": 0.2, "protein": 14.000000000000002, "carbs": 0.3}, "454": {"name": "rice cakes", "energy": 388.5, "fat": 2.8000000000000003, "protein": 8.200000000000001, "carbs": 81.0}, "455": {"name": "cookies", "energy": 492.0, "fat": 25.0, "protein": 5.1, "carbs": 65.0}, "456": {"name": "barley", "energy": 123.0, "fat": 0.4, "protein": 2.3, "carbs": 28.000000000000004}, "457": {"name": "sun dried tomatoes", "energy": 258.0, "fat": 3.0, "protein": 14.000000000000002, "carbs": 56.00000000000001}, "458": {"name": "deprecated", "energy": 30.0, "fat": 0.1, "protein": 0.6, "carbs": 7.6}, "459": {"name": "cereal bars", "energy": 342.0, "fat": 0.8999999999999999, "protein": 5.8999999999999995, "carbs": 78.0}, "460": {"name": "nectar", "energy": 31.6, "fat": 0.0, "protein": 6.6000000000000005, "carbs": 8.200000000000001}, "461": {"name": "samosas", "energy": 262.0, "fat": 17.0, "protein": 3.5000000000000004, "carbs": 24.0}, "462": {"name": "pork", "energy": 238.0, "fat": 14.000000000000002, "protein": 26.0, "carbs": 0.0}, "463": {"name": "beets", "energy": 44.0, "fat": 0.2, "protein": 1.7000000000000002, "carbs": 10.0}, "464": {"name": "baked potatoes", "energy": 93.0, "fat": 0.1, "protein": 2.5, "carbs": 21.0}, "465": {"name": "american cheese", "energy": 312.0, "fat": 23.0, "protein": 17.0, "carbs": 8.799999999999999}, "466": {"name": "pistachios", "energy": 569.0, "fat": 46.0, "protein": 21.0, "carbs": 28.000000000000004}, "467": {"name": "relish", "energy": 130.0, "fat": 0.5, "protein": 0.4, "carbs": 35.0}, "468": {"name": "camembert cheese", "energy": 300.0, "fat": 24.0, "protein": 20.0, "carbs": 0.5}, "469": {"name": "carp", "energy": 128.0, "fat": 2.7, "protein": 26.0, "carbs": 0.0}, "470": {"name": "deprecated", "energy": 93.0, "fat": 0.1, "protein": 2.5, "carbs": 21.0}, "471": {"name": "cherry tomatoes", "energy": 18.0, "fat": 0.2, "protein": 0.8999999999999999, "carbs": 3.9}, "472": {"name": "couscous", "energy": 112.00000000000001, "fat": 0.2, "protein": 3.8, "carbs": 23.0}, "473": {"name": "cranberries", "energy": 46.0, "fat": 0.1, "protein": 0.5, "carbs": 12.0}, "474": {"name": "quesadillas", "energy": 368.0, "fat": 23.0, "protein": 16.0, "carbs": 24.0}, "475": {"name": "salsa", "energy": 28.999999999999996, "fat": 0.2, "protein": 1.5, "carbs": 6.6000000000000005}, "476": {"name": "almond milk", "energy": 23.0, "fat": 1.0, "protein": 0.4, "carbs": 3.2}, "477": {"name": "light beer", "energy": 28.999999999999996, "fat": 0.0, "protein": 0.2, "carbs": 1.6}, "478": {"name": "sweet rolls", "energy": 273.0, "fat": 6.3, "protein": 8.6, "carbs": 46.0}, "479": {"name": "challah", "energy": 287.0, "fat": 6.0, "protein": 9.5, "carbs": 48.0}, "480": {"name": "ice cream soda", "energy": 51.0, "fat": 0.0, "protein": 0.0, "carbs": 13.0}, "481": {"name": "flatbread", "energy": 275.0, "fat": 1.2, "protein": 9.1, "carbs": 56.00000000000001}, "482": {"name": "rice", "energy": 130.0, "fat": 0.3, "protein": 2.7, "carbs": 28.000000000000004}, "483": {"name": "water chestnuts", "energy": 30.0, "fat": 0.1, "protein": 0.8999999999999999, "carbs": 6.800000000000001}, "484": {"name": "chicken salad", "energy": 227.0, "fat": 16.0, "protein": 17.0, "carbs": 2.9000000000000004}, "485": {"name": "zucchini", "energy": 15.0, "fat": 0.4, "protein": 1.0999999999999999, "carbs": 2.7}, "486": {"name": "cakes", "energy": 391.0, "fat": 18.0, "protein": 3.0, "carbs": 56.00000000000001}, "487": {"name": "crepes", "energy": 165.0, "fat": 8.3, "protein": 5.8999999999999995, "carbs": 16.0}, "488": {"name": "mexican cheese", "energy": 358.0, "fat": 28.999999999999996, "protein": 24.0, "carbs": 1.7999999999999998}, "489": {"name": "lobster", "energy": 143.0, "fat": 1.9, "protein": 26.0, "carbs": 3.1}, "490": {"name": "tea", "energy": 1.0, "fat": 0.0, "protein": 0.0, "carbs": 0.3}, "491": {"name": "nachos", "energy": 224.00000000000003, "fat": 17.0, "protein": 12.0, "carbs": 4.8}, "492": {"name": "taco salad", "energy": 157.0, "fat": 8.5, "protein": 7.000000000000001, "carbs": 14.000000000000002}, "493": {"name": "lager", "energy": 43.0, "fat": 0.0, "protein": 0.5, "carbs": 3.5999999999999996}, "494": {"name": "jams", "energy": 278.0, "fat": 0.1, "protein": 0.4, "carbs": 69.0}, "495": {"name": "cream cheese", "energy": 350.0, "fat": 34.0, "protein": 6.2, "carbs": 5.5}, "496": {"name": "capers", "energy": 23.0, "fat": 0.8999999999999999, "protein": 2.4, "carbs": 4.9}, "497": {"name": "halibut", "energy": 111.00000000000001, "fat": 1.6, "protein": 23.0, "carbs": 0.0}, "498": {"name": "orange juice", "energy": 47.0, "fat": 0.1, "protein": 0.7000000000000001, "carbs": 11.0}, "499": {"name": "latte", "energy": 44.0, "fat": 1.7000000000000002, "protein": 2.9000000000000004, "carbs": 4.3999999999999995}, "500": {"name": "taquitos", "energy": 286.0, "fat": 13.0, "protein": 9.3, "carbs": 34.0}, "501": {"name": "cherries", "energy": 63.0, "fat": 0.2, "protein": 1.0999999999999999, "carbs": 16.0}, "502": {"name": "milk", "energy": 51.0, "fat": 1.9, "protein": 3.5000000000000004, "carbs": 5.0}, "503": {"name": "applesauce", "energy": 68.0, "fat": 0.2, "protein": 0.2, "carbs": 17.0}, "504": {"name": "vegetable juice", "energy": 22.0, "fat": 0.3, "protein": 0.8999999999999999, "carbs": 3.9}, "505": {"name": "meatballs", "energy": 286.0, "fat": 22.0, "protein": 14.000000000000002, "carbs": 8.1}, "506": {"name": "pinto beans", "energy": 143.0, "fat": 0.7000000000000001, "protein": 9.0, "carbs": 26.0}, "507": {"name": "mandarin oranges", "energy": 53.0, "fat": 0.3, "protein": 0.8, "carbs": 13.0}, "508": {"name": "soy sauce", "energy": 53.0, "fat": 0.6, "protein": 8.1, "carbs": 4.9}, "509": {"name": "tempura", "energy": 105.0, "fat": 3.9, "protein": 6.5, "carbs": 11.0}, "510": {"name": "chicken apple sausage", "energy": 160.0, "fat": 10.0, "protein": 14.000000000000002, "carbs": 3.0}, "511": {"name": "spinach (cooked)", "energy": 23.0, "fat": 0.0, "protein": 3.0, "carbs": 4.0}, "512": {"name": "kimchi", "energy": 30.0, "fat": 0.1, "protein": 1.6, "carbs": 5.7}, "513": {"name": "millet", "energy": 119.0, "fat": 1.0, "protein": 3.5000000000000004, "carbs": 23.7}, "514": {"name": "wheat berry", "energy": 91.0, "fat": 0.5, "protein": 4.2, "carbs": 19.1}, "515": {"name": "arugula", "energy": 25.0, "fat": 0.7000000000000001, "protein": 2.6, "carbs": 3.6999999999999997}, "516": {"name": "rosemary", "energy": 131.0, "fat": 5.7, "protein": 2.9000000000000004, "carbs": 20.0}, "517": {"name": "chard", "energy": 19.0, "fat": 0.2, "protein": 1.7999999999999998, "carbs": 3.6999999999999997}, "518": {"name": "thyme", "energy": 101.0, "fat": 1.7000000000000002, "protein": 6.0, "carbs": 24.0}, "519": {"name": "oregano", "energy": 270.0, "fat": 4.0, "protein": 9.0, "carbs": 69.0}, "520": {"name": "lemon juice", "energy": 17.0, "fat": 0.0, "protein": 0.4, "carbs": 5.6000000000000005}, "521": {"name": "basil", "energy": 24.0, "fat": 0.0, "protein": 4.0, "carbs": 2.0}, "522": {"name": "tatsoi", "energy": 22.0, "fat": 0.3, "protein": 2.1999999999999997, "carbs": 3.9}, "523": {"name": "cilantro", "energy": 22.8, "fat": 0.5, "protein": 2.1999999999999997, "carbs": 3.6999999999999997}, "524": {"name": "parsley", "energy": 37.1, "fat": 0.8, "protein": 2.9000000000000004, "carbs": 6.4}, "525": {"name": "bok choy", "energy": 13.0, "fat": 0.2, "protein": 1.5, "carbs": 2.1999999999999997}, "526": {"name": "mustard greens", "energy": 27.0, "fat": 0.4, "protein": 2.9000000000000004, "carbs": 4.7}, "527": {"name": "chive", "energy": 30.0, "fat": 0.7000000000000001, "protein": 3.3000000000000003, "carbs": 4.3999999999999995}, "528": {"name": "celery root", "energy": 42.0, "fat": 0.3, "protein": 1.5, "carbs": 9.2}, "529": {"name": "chayote squash", "energy": 24.0, "fat": 0.5, "protein": 0.6, "carbs": 5.1}, "530": {"name": "endive", "energy": 17.0, "fat": 0.2, "protein": 1.3, "carbs": 3.4000000000000004}, "531": {"name": "pumpkin seeds", "energy": 446.0, "fat": 19.0, "protein": 19.0, "carbs": 54.0}, "532": {"name": "pesto", "energy": 562.0, "fat": 54.900000000000006, "protein": 12.1, "carbs": 8.0}, "533": {"name": "orzo", "energy": 225.0, "fat": 0.8999999999999999, "protein": 7.9, "carbs": 45.800000000000004}, "534": {"name": "country rice", "energy": 152.04, "fat": 6.800000000000001, "protein": 3.8600000000000003, "carbs": 31.6}, "535": {"name": "green onions", "energy": 32.0, "fat": 0.2, "protein": 1.7999999999999998, "carbs": 7.000000000000001}, "536": {"name": "banana with peel", "energy": 55.60000000000001, "fat": 0.2, "protein": 0.7000000000000001, "carbs": 14.399999999999999}, "537": {"name": "orange with peel", "energy": 29.4, "fat": 0.1, "protein": 0.6, "carbs": 7.5}, "538": {"name": "jicama", "energy": 38.0, "fat": 0.1, "protein": 0.7000000000000001, "carbs": 9.0}, "539": {"name": "nopales", "energy": 16.0, "fat": 0.1, "protein": 1.4000000000000001, "carbs": 3.3000000000000003}, "540": {"name": "ginger", "energy": 80.0, "fat": 0.8, "protein": 1.7999999999999998, "carbs": 18.0}, "541": {"name": "tomatillo", "energy": 32.0, "fat": 1.0, "protein": 1.0, "carbs": 6.0}, "542": {"name": "white beans", "energy": 139.0, "fat": 0.4, "protein": 9.700000000000001, "carbs": 25.1}, "543": {"name": "chia seeds", "energy": 486.00000000000006, "fat": 31.0, "protein": 17.0, "carbs": 42.0}, "544": {"name": "corn starch", "energy": 380.0, "fat": 0.05, "protein": 0.3, "carbs": 91.4}, "545": {"name": "greek yogurt", "energy": 59.0, "fat": 0.4, "protein": 10.0, "carbs": 3.5999999999999996}, "546": {"name": "balsamic vinegar", "energy": 88.0, "fat": 0.0, "protein": 0.5, "carbs": 17.0}, "547": {"name": "corn nuts", "energy": 436.00000000000006, "fat": 14.000000000000002, "protein": 9.0, "carbs": 72.0}, "548": {"name": "coconut milk", "energy": 229.99999999999997, "fat": 24.0, "protein": 2.3, "carbs": 6.0}, "549": {"name": "pizza dough", "energy": 235.5, "fat": 4.7, "protein": 5.4, "carbs": 41.699999999999996}, "550": {"name": "fennel", "energy": 31.0, "fat": 0.2, "protein": 1.2, "carbs": 7.000000000000001}, "551": {"name": "pizza sauce", "energy": 28.999999999999996, "fat": 0.2, "protein": 1.3, "carbs": 7.000000000000001}, "552": {"name": "pomegranate", "energy": 83.0, "fat": 1.2, "protein": 1.7000000000000002, "carbs": 19.0}, "553": {"name": "nut cheese", "energy": 210.0, "fat": 10.100000000000001, "protein": 25.6, "carbs": 4.0}, "554": {"name": "soy sausage", "energy": 202.0, "fat": 14.399999999999999, "protein": 16.0, "carbs": 6.3}, "555": {"name": "oil", "energy": 886.4000000000001, "fat": 100.0, "protein": 0.0, "carbs": 0.0}}
pipeline.py ADDED
@@ -0,0 +1,177 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Dict, List, Any
2
+ from PIL import Image
3
+ from tfing import TFIng
4
+ from tfport import TFPort, get_look_ahead_mask, get_padding_mask
5
+
6
+ import os
7
+ import json
8
+ import tensorflow as tf
9
+ import numpy as np
10
+
11
+
12
+ class PreTrainedPipeline():
13
+ def __init__(self, path=""):
14
+ crop_size = (224, 224)
15
+ embed_dim = 256,
16
+ num_layers = 3
17
+ seq_length = 20
18
+ hidden_dim = 1024
19
+ num_heads = 8
20
+ self.nutr_names = ('energy', 'fat', 'protein', 'carbs')
21
+ with open(f'ingredients_metadata.json', encoding='UTF-8') as f:
22
+ self.ingredients = json.load(f)
23
+ self.ing_names = {ing['name']: int(ing_id) for ing_id, ing in self.ingredients.items()}
24
+ self.vocab_size = len(self.ingredients) + 3
25
+ self.seq_length = seq_length
26
+
27
+ self.tfing = TFIng(
28
+ crop_size,
29
+ embed_dim,
30
+ num_layers,
31
+ seq_length,
32
+ hidden_dim,
33
+ num_heads,
34
+ self.vocab_size
35
+ )
36
+ self.tfing.compile()
37
+ self.tfing((tf.zeros((1, 224, 224, 3)), tf.zeros((1, seq_length))))
38
+ self.tfing.load_weights(f'tfing.h5')
39
+
40
+ self.tfport = TFPort(
41
+ crop_size,
42
+ embed_dim,
43
+ num_layers,
44
+ num_layers,
45
+ seq_length,
46
+ seq_length,
47
+ hidden_dim,
48
+ num_heads,
49
+ self.vocab_size
50
+ )
51
+ self.tfport.compile()
52
+ self.tfport((tf.zeros((1, 224, 224, 3)), tf.zeros((1, seq_length)), tf.zeros((1, seq_length))))
53
+ self.tfport.load_weights(f'/tfport.h5')
54
+
55
+ def __call__(self, inputs: "Image.Image") -> List[Dict[str, Any]]:
56
+ image = tf.keras.preprocessing.image.img_to_array(inputs)
57
+ height = tf.shape(image)[0]
58
+ width = tf.shape(image)[1]
59
+ if width > height:
60
+ image = tf.image.resize(image, (self.img_size, int(float(self.img_size * width) / float(height))))
61
+ else:
62
+ image = tf.image.resize(image, (int(float(self.img_size * height) / float(width)), self.img_size))
63
+
64
+ image = tf.keras.applications.inception_v3.preprocess_input(image)
65
+ image = tf.keras.layers.CenterCrop(*self.crop_size)(image)
66
+ prediction = self.predict(image)
67
+ return [
68
+ {
69
+ "label": prediction['ingredients'][i],
70
+ "score": prediction['portions'][i]
71
+ }
72
+ for i in range(len(prediction['ingredients']))
73
+ ]
74
+
75
+ def encode_image(self, image):
76
+ encoder_out = self.tfing.encoder(image)
77
+ encoder_out = self.tfing.conv(encoder_out)
78
+ encoder_out = tf.reshape(
79
+ encoder_out,
80
+ (tf.shape(encoder_out)[0], -1, tf.shape(encoder_out)[3])
81
+ )
82
+ return encoder_out
83
+
84
+ def encode_ingredients(self, ingredients, padding_mask):
85
+ return self.tfport.ingredient_encoder(ingredients, padding_mask)
86
+
87
+ def decode_ingredients(self, encoded_img, decoder_in):
88
+ decoder_outputs = self.tfing.decoder(decoder_in, encoded_img)
89
+ output = self.tfing.linear(decoder_outputs)
90
+ return output + self.tfing.get_replacement_mask(decoder_in)
91
+
92
+ def decode_portions(self, encoded_img, encoded_ingr, decoder_in, padding_mask):
93
+ encoder_outputs = tf.concat([encoded_img, encoded_ingr], axis=1)
94
+ img_mask = tf.ones((tf.shape(encoded_img)[0], 1, tf.shape(encoded_img)[1]), dtype=tf.int32)
95
+ padding_mask = tf.concat([img_mask, padding_mask], axis=2)
96
+ look_ahead_mask = get_look_ahead_mask(decoder_in)
97
+
98
+ x = self.tfport.portion_embedding(decoder_in)
99
+ for i in range(len(self.tfport.decoder_layers)):
100
+ x = self.tfport.decoder_layers[i](x, encoder_outputs, look_ahead_mask, padding_mask=padding_mask)
101
+ x = self.tfport.linear(x)
102
+ return tf.squeeze(x)
103
+
104
+ def predict_ingredients(self, encoded_img, known_ing=None):
105
+ predicted = np.zeros((1, self.seq_length + 1), dtype=int)
106
+ predicted[0, 0] = self.vocab_size - 2
107
+ start_index = 0
108
+ if known_ing:
109
+ predicted[0, 1:len(known_ing) + 1] = known_ing
110
+ start_index = len(known_ing)
111
+ for i in range(start_index, self.seq_length):
112
+ decoded = self.decode_ingredients(encoded_img, predicted[:, :-1])
113
+ next_token = int(np.argmax(decoded[0, i]))
114
+ predicted[0, i + 1] = next_token
115
+ if next_token == self.vocab_size - 1:
116
+ return predicted[0, 1:]
117
+ if i == self.seq_length - 1:
118
+ predicted[0, i + 1] = self.vocab_size - 1
119
+ return predicted[0, 1:]
120
+
121
+ def predict_portions(self, encoded_image, ingredients):
122
+ predicted = np.zeros((1, self.seq_length + 1), dtype=float)
123
+ predicted[0, 0] = -1
124
+ padding_mask = get_padding_mask(ingredients)
125
+ encoded_ingr = self.encode_ingredients(ingredients, padding_mask)
126
+ for i in range(self.seq_length):
127
+ if ingredients[0, i] == self.vocab_size - 1:
128
+ return predicted[0, 1:]
129
+ next_proportion = float(
130
+ self.decode_portions(
131
+ encoded_image,
132
+ encoded_ingr,
133
+ predicted[:, :-1],
134
+ padding_mask
135
+ )[i]
136
+ )
137
+ predicted[0, i + 1] = next_proportion
138
+ return predicted[0, 1:]
139
+
140
+ def process_ingredients(self, ingredients):
141
+ processed = []
142
+ for ingredient in ingredients.split('\n'):
143
+ stripped = ingredient.strip()
144
+ if stripped == '.':
145
+ return processed, True
146
+ if stripped in self.ing_names:
147
+ processed.append(self.ing_names[stripped])
148
+ return processed, False
149
+
150
+ def predict(self, image, known_ing=None):
151
+ encoded_image = self.encode_image(image[tf.newaxis, :])
152
+ known_ing, skip_ing = self.process_ingredients(known_ing)\
153
+ if known_ing else (None, False)
154
+ if not skip_ing:
155
+ ingredients = self.predict_ingredients(encoded_image, known_ing=known_ing)
156
+ else:
157
+ ingredients = known_ing[:self.seq_length - 1]
158
+ ingredients.append(self.vocab_size - 1)
159
+ ingredients = np.pad(ingredients, (0, self.seq_length - len(ingredients)))
160
+ readable_ingredients = [
161
+ self.ingredients[str(token)]['name'] for token in ingredients
162
+ if token != 0 and token != self.vocab_size - 1
163
+ ]
164
+ portions = self.predict_portions(encoded_image, ingredients[tf.newaxis, :])\
165
+ if len(readable_ingredients) > 1 else [100]
166
+ portions_slice = portions[:len(readable_ingredients)]
167
+ scale = 100 / sum(portions_slice)
168
+ return {
169
+ 'ingredients': readable_ingredients,
170
+ 'portions': [portion * scale for portion in portions_slice],
171
+ 'nutrition': {
172
+ name: sum(
173
+ self.ingredients[str(ingredients[i])][name] * portions[i] / 100
174
+ for i in range(len(readable_ingredients))
175
+ ) for name in self.nutr_names
176
+ }
177
+ }
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ tensorflow==2.9.0
2
+ tensorflow_probability
3
+ numpy
tfing.h5 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4f0f9c7d524719bc922424f1642397d6203cd7aeafc8b19d1e8c03f241df0a69
3
+ size 147729928
tfing.py ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import tensorflow as tf
2
+ from tensorflow import keras
3
+ from .transformer import TransformerDecoder
4
+ import tensorflow_probability as tfp
5
+
6
+ class TFIng(keras.Model):
7
+ def __init__(self, crop_size, embed_dim, num_layers, seq_length, hidden_dim, num_heads,
8
+ target_vocab_size, dropout_rate=0.1):
9
+ super().__init__()
10
+ self.target_vocab_size = target_vocab_size
11
+
12
+ self.encoder = keras.applications.InceptionV3(
13
+ include_top=False,
14
+ weights="imagenet",
15
+ input_shape=crop_size + (3,),
16
+ )
17
+ self.conv = keras.layers.Conv2D(embed_dim, 1)
18
+ self.decoder = TransformerDecoder(num_layers, seq_length, embed_dim, hidden_dim, num_heads,
19
+ target_vocab_size, dropout_rate=dropout_rate)
20
+ self.linear = keras.layers.Dense(target_vocab_size, activation=None)
21
+
22
+ def call(self, inputs, training=False):
23
+ encoder_inputs, targets = inputs
24
+ encoder_out = self.encoder(encoder_inputs, training=training)
25
+ encoder_out = self.conv(encoder_out, training=training)
26
+ encoder_out = tf.reshape(encoder_out, (tf.shape(encoder_out)[0], -1, tf.shape(encoder_out)[3]))
27
+ decoder_outputs = self.decoder(targets, encoder_out, training=training)
28
+ output = self.linear(decoder_outputs)
29
+ return output + self.get_replacement_mask(targets)
30
+
31
+ def get_replacement_mask(self, targets):
32
+ targets = tf.cast(targets, tf.int32)
33
+ batch_size, seq_length = tf.shape(targets)[0], tf.shape(targets)[1]
34
+
35
+ n = int(seq_length * (seq_length + 1) / 2)
36
+ mask = tfp.math.fill_triangular(tf.ones((n,), dtype=tf.int32))
37
+ mask = tf.repeat(mask[tf.newaxis, :], batch_size, axis=0)
38
+
39
+ targets_repeated = tf.repeat(targets[:, tf.newaxis, :], seq_length, axis=1)
40
+ targets_masked = targets_repeated * mask
41
+ columns = tf.boolean_mask(
42
+ targets_masked,
43
+ tf.where(targets_masked != 0, tf.ones_like(targets_masked), tf.zeros_like(targets_masked))
44
+ )
45
+
46
+ rows_idx = tf.range(seq_length)
47
+ rows_idx_repeated = tf.reshape(tf.repeat(rows_idx, seq_length), (seq_length, seq_length))
48
+ rows_idx_repeated = tf.repeat(rows_idx_repeated[tf.newaxis, :], batch_size, axis=0)
49
+ rows = tf.boolean_mask(
50
+ rows_idx_repeated,
51
+ tf.where(targets_masked != 0, tf.ones_like(targets_masked), tf.zeros_like(targets_masked))
52
+ )
53
+
54
+ batches_idx = tf.range(batch_size)
55
+ batches_idx_repeated = tf.reshape(
56
+ tf.repeat(batches_idx, seq_length * seq_length), (batch_size, seq_length, seq_length)
57
+ )
58
+ batches = tf.boolean_mask(
59
+ batches_idx_repeated,
60
+ tf.where(targets_masked != 0, tf.ones_like(targets_masked), tf.zeros_like(targets_masked))
61
+ )
62
+
63
+ idx = tf.stack([batches, rows, columns], axis=1)
64
+
65
+ sparse_mask = tf.SparseTensor(
66
+ tf.cast(idx, tf.int64),
67
+ tf.fill([tf.shape(idx)[0]], float('-inf')),
68
+ [batch_size, seq_length, self.target_vocab_size]
69
+ )
70
+ sparse_mask = tf.sparse.reorder(sparse_mask)
71
+ return tf.sparse.to_dense(sparse_mask)
tfport.h5 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:52942aabb881f05d38bb960a7d083cf2b0929bde563264f974114355ce229b15
3
+ size 178806824
tfport.py ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import tensorflow as tf
2
+ from tensorflow import keras
3
+ from .transformer import TransformerEncoder, TransformerDecoderLayer, get_look_ahead_mask, get_padding_mask
4
+
5
+ class TFPort(keras.Model):
6
+ def __init__(self, crop_size, embed_dim, encoder_layers, decoder_layers, input_seq_length,
7
+ target_seq_length, hidden_dim, num_heads, input_vocab_size, dropout_rate=0.1):
8
+ super().__init__()
9
+
10
+ self.image_encoder = keras.applications.InceptionV3(
11
+ include_top=False,
12
+ weights='imagenet',
13
+ input_shape=crop_size + (3,),
14
+ )
15
+ self.image_encoder.trainable = False
16
+ self.conv = keras.layers.Conv2D(embed_dim, 1)
17
+ self.ingredient_encoder = TransformerEncoder(encoder_layers, input_seq_length, embed_dim, hidden_dim,
18
+ num_heads, input_vocab_size, dropout_rate=dropout_rate)
19
+ self.portion_embedding = PortionEmbedding(target_seq_length, embed_dim)
20
+ self.dropout = keras.layers.Dropout(dropout_rate)
21
+ self.decoder_layers = [
22
+ TransformerDecoderLayer(embed_dim, hidden_dim, num_heads, dropout_rate=dropout_rate)
23
+ for _ in range(decoder_layers)
24
+ ]
25
+ self.linear = keras.layers.Dense(1, activation="relu")
26
+
27
+ def call(self, inputs, training=False):
28
+ image, ingredients, targets = inputs
29
+ padding_mask = get_padding_mask(ingredients)
30
+ encoded_img = self.image_encoder(image, training=False)
31
+ encoded_img = self.conv(encoded_img, training=training)
32
+ encoded_img = tf.reshape(encoded_img, (tf.shape(encoded_img)[0], -1, tf.shape(encoded_img)[3]))
33
+ encoded_ingr = self.ingredient_encoder(ingredients, padding_mask, training=training)
34
+ encoder_outputs = tf.concat([encoded_img, encoded_ingr], axis=1)
35
+
36
+ img_mask = tf.ones((tf.shape(encoded_img)[0], 1, tf.shape(encoded_img)[1]), dtype=tf.int32)
37
+ padding_mask = tf.concat([img_mask, padding_mask], axis=2)
38
+ look_ahead_mask = get_look_ahead_mask(targets)
39
+
40
+ x = self.portion_embedding(targets)
41
+ x = self.dropout(x, training=training)
42
+ for i in range(len(self.decoder_layers)):
43
+ x = self.decoder_layers[i](x, encoder_outputs, look_ahead_mask, training=training,
44
+ padding_mask=padding_mask)
45
+ x = self.linear(x)
46
+ return tf.squeeze(x)
47
+
48
+
49
+ class PortionEmbedding(keras.layers.Layer):
50
+ def __init__(self, seq_length, embed_dim):
51
+ super().__init__()
52
+
53
+ self.linear = keras.layers.Dense(embed_dim)
54
+ self.position_embeddings = keras.layers.Embedding(
55
+ input_dim=seq_length, output_dim=embed_dim
56
+ )
57
+
58
+ def call(self, inputs):
59
+ positions = tf.range(start=0, limit=tf.shape(inputs)[-1], delta=1)
60
+ embedded_portions = self.linear(inputs[:, :, tf.newaxis])
61
+ embedded_positions = self.position_embeddings(positions)
62
+ return embedded_portions + embedded_positions
transformer.py ADDED
@@ -0,0 +1,179 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import tensorflow as tf
2
+ import tensorflow_probability as tfp
3
+ from tensorflow import keras
4
+
5
+ class TransformerEncoderLayer(keras.layers.Layer):
6
+ def __init__(self, embed_dim, hidden_dim, num_heads, dropout_rate=0.1):
7
+ super().__init__()
8
+
9
+ self.attention = keras.layers.MultiHeadAttention(
10
+ num_heads=num_heads, key_dim=embed_dim
11
+ )
12
+ self.feed_forward = keras.Sequential(
13
+ [
14
+ keras.layers.Dense(hidden_dim, activation="relu"),
15
+ keras.layers.Dense(embed_dim, activation=None)
16
+ ]
17
+ )
18
+
19
+ self.layernorm1 = keras.layers.LayerNormalization()
20
+ self.layernorm2 = keras.layers.LayerNormalization()
21
+
22
+ self.dropout1 = keras.layers.Dropout(dropout_rate)
23
+ self.dropout2 = keras.layers.Dropout(dropout_rate)
24
+
25
+ def call(self, inputs, padding_mask, training=False):
26
+ attn_out = self.attention(
27
+ query=inputs,
28
+ value=inputs,
29
+ key=inputs,
30
+ attention_mask=padding_mask
31
+ )
32
+ attn_out = self.dropout1(attn_out, training=training)
33
+ x = self.layernorm1(inputs + attn_out)
34
+
35
+ ff_out = self.feed_forward(x)
36
+ ff_out = self.dropout2(ff_out, training=training)
37
+ return self.layernorm2(x + ff_out)
38
+
39
+
40
+ class TransformerEncoder(keras.Model):
41
+ def __init__(self, num_layers, seq_length, embed_dim, hidden_dim, num_heads, vocab_size,
42
+ dropout_rate=0.1):
43
+ super().__init__()
44
+
45
+ self.embedding = PositionalEmbedding(seq_length, vocab_size, embed_dim)
46
+ self.dropout = keras.layers.Dropout(dropout_rate)
47
+ self.encoder_layers = [
48
+ TransformerEncoderLayer(embed_dim, hidden_dim, num_heads, dropout_rate=dropout_rate)
49
+ for _ in range(num_layers)
50
+ ]
51
+
52
+ def call(self, inputs, padding_mask, training=False):
53
+ x = self.embedding(inputs)
54
+ x = self.dropout(x, training=training)
55
+ for i in range(len(self.encoder_layers)):
56
+ x = self.encoder_layers[i](x, padding_mask, training=training)
57
+ return x
58
+
59
+
60
+ class TransformerDecoderLayer(keras.layers.Layer):
61
+ def __init__(self, embed_dim, hidden_dim, num_heads, dropout_rate=0.1):
62
+ super().__init__()
63
+
64
+ self.self_attention = keras.layers.MultiHeadAttention(
65
+ num_heads=num_heads, key_dim=embed_dim
66
+ )
67
+ self.attention = keras.layers.MultiHeadAttention(
68
+ num_heads=num_heads, key_dim=embed_dim
69
+ )
70
+ self.feed_fordward = keras.Sequential(
71
+ [
72
+ keras.layers.Dense(hidden_dim, activation="relu"),
73
+ keras.layers.Dense(embed_dim, activation=None)
74
+ ]
75
+ )
76
+
77
+ self.layernorm1 = keras.layers.LayerNormalization()
78
+ self.layernorm2 = keras.layers.LayerNormalization()
79
+ self.layernorm3 = keras.layers.LayerNormalization()
80
+
81
+ self.dropout1 = keras.layers.Dropout(dropout_rate)
82
+ self.dropout2 = keras.layers.Dropout(dropout_rate)
83
+ self.dropout3 = keras.layers.Dropout(dropout_rate)
84
+
85
+ def call(self, inputs, encoder_outputs, look_ahead_mask, training=False, padding_mask=None):
86
+ self_attn_out = self.self_attention(
87
+ query=inputs,
88
+ value=inputs,
89
+ key=inputs,
90
+ attention_mask=look_ahead_mask
91
+ )
92
+ self_attn_out = self.dropout1(self_attn_out, training=training)
93
+ x = self.layernorm1(inputs + self_attn_out)
94
+
95
+ attn_out = self.attention(
96
+ query=x,
97
+ value=encoder_outputs,
98
+ key=encoder_outputs,
99
+ attention_mask=padding_mask
100
+ )
101
+ attn_out = self.dropout2(attn_out, training=training)
102
+ x = self.layernorm2(x + attn_out)
103
+
104
+ ff_out = self.feed_fordward(x)
105
+ ff_out = self.dropout3(ff_out, training=training)
106
+ return self.layernorm3(x + ff_out)
107
+
108
+
109
+ class TransformerDecoder(keras.Model):
110
+ def __init__(self, num_layers, seq_length, embed_dim, hidden_dim, num_heads, vocab_size,
111
+ dropout_rate=0.1):
112
+ super().__init__()
113
+
114
+ self.embedding = PositionalEmbedding(seq_length, vocab_size, embed_dim)
115
+ self.dropout = keras.layers.Dropout(dropout_rate)
116
+ self.decoder_layers = [
117
+ TransformerDecoderLayer(embed_dim, hidden_dim, num_heads, dropout_rate=dropout_rate)
118
+ for _ in range(num_layers)
119
+ ]
120
+
121
+ def call(self, inputs, encoder_outputs, training=False, padding_mask=None):
122
+ look_ahead_mask = get_look_ahead_mask(inputs)
123
+ x = self.embedding(inputs)
124
+ x = self.dropout(x, training=training)
125
+ for i in range(len(self.decoder_layers)):
126
+ x = self.decoder_layers[i](x, encoder_outputs, look_ahead_mask,
127
+ training=training, padding_mask=padding_mask)
128
+ return x
129
+
130
+
131
+ def get_padding_mask(inputs):
132
+ mask = tf.cast(tf.math.not_equal(inputs, 0), tf.int32)
133
+ return mask[:, tf.newaxis, :]
134
+
135
+ def get_look_ahead_mask(inputs):
136
+ input_shape = tf.shape(inputs)
137
+ batch_size, seq_length = input_shape[0], input_shape[1]
138
+ n = int(seq_length * (seq_length + 1) / 2)
139
+ mask = tfp.math.fill_triangular(tf.ones((n,), dtype=tf.int32))
140
+ mask = tf.repeat(mask[tf.newaxis, :], batch_size, axis=0)
141
+ return tf.minimum(mask, get_padding_mask(inputs))
142
+
143
+
144
+ class PositionalEmbedding(keras.layers.Layer):
145
+ def __init__(self, seq_length, vocab_size, embed_dim):
146
+ super().__init__()
147
+
148
+ self.token_embeddings = keras.layers.Embedding(
149
+ input_dim=vocab_size, output_dim=embed_dim
150
+ )
151
+ self.position_embeddings = keras.layers.Embedding(
152
+ input_dim=seq_length, output_dim=embed_dim
153
+ )
154
+
155
+ def call(self, inputs):
156
+ positions = tf.range(start=0, limit=tf.shape(inputs)[-1], delta=1)
157
+ embedded_tokens = self.token_embeddings(inputs)
158
+ embedded_positions = self.position_embeddings(positions)
159
+ return embedded_tokens + embedded_positions
160
+
161
+
162
+ class Transformer(keras.Model):
163
+ def __init__(self, encoder_layers, decoder_layers, input_seq_length, target_seq_length, embed_dim,
164
+ hidden_dim, num_heads, input_vocab_size, target_vocab_size, dropout_rate=0.1):
165
+ super().__init__()
166
+
167
+ self.encoder = TransformerEncoder(encoder_layers, input_seq_length, embed_dim, hidden_dim,
168
+ num_heads, input_vocab_size, dropout_rate=dropout_rate)
169
+ self.decoder = TransformerDecoder(decoder_layers, target_seq_length, embed_dim, hidden_dim,
170
+ num_heads, target_vocab_size, dropout_rate=dropout_rate)
171
+ self.linear = keras.layers.Dense(target_vocab_size, activation=None)
172
+
173
+ def call(self, inputs, training=False):
174
+ encoder_inputs, targets = inputs
175
+ padding_mask = get_padding_mask(encoder_inputs)
176
+ encoder_outputs = self.encoder(encoder_inputs, padding_mask, training=training)
177
+ decoder_outputs = self.decoder(targets, encoder_outputs, training=training,
178
+ padding_mask=padding_mask)
179
+ return self.linear(decoder_outputs)