import util import numpy as np from pickle import load from nltk.translate.bleu_score import corpus_bleu from keras.models import load_model def word_for_id(integer, tokenizer): """ 将一个整数转换为英文单词 :param integer: 一个代表英文的整数 :param tokenizer: 一个预先产生的keras.preprocessing.text.Tokenizer :return: 输入整数对应的英文单词 """ for word, index in tokenizer.word_index.items(): if index == integer: return word return None def generate_caption(model, tokenizer, photo_feature, max_length = 40): """ 根据输入的图像特征产生图像的标题 :param model: 预先训练好的图像标题生成神经网络模型 :param tokenizer: 一个预先产生的keras.preprocessing.text.Tokenizer :param photo_feature:输入的图像特征, 为VGG16网络修改版产生的特征 :param max_length: 训练数据中最长的图像标题的长度 :return: 产生的图像的标题 """ pass def evaluate_model(model, captions, photo_features, tokenizer, max_length = 40): """计算训练好的神经网络产生的标题的质量,根据4个BLEU分数来评估 Args: model: 训练好的产生标题的神经网络 captions: dict, 测试数据集, key为文件名(不带.jpg后缀), value为图像标题list photo_features: dict, key为文件名(不带.jpg后缀), value为图像特征 tokenizer: 英文单词和整数转换的工具keras.preprocessing.text.Tokenizer max_length:训练集中的标题的最大长度 Returns: tuple: 第一个元素为权重为(1.0, 0, 0, 0)的BLEU分数 第二个元素为权重为(0.5, 0.5, 0, 0)的BLEU分数 第三个元素为权重为(0.3, 0.3, 0.3, 0)的BLEU分数 第四个元素为权重为(0.25, 0.25, 0.25, 0.25)的BLEU分数 """ pass