我正在尝试执行这个代码。它是用2.x编写的,我正在用python3.7修改它。我可以改变它并执行90%。但是我得到了一个类型错误。你知道吗
我有个档案训练.py你知道吗
import SceneDesc
import sys
def train(epoch):
sd = SceneDesc.scenedesc()
model = sd.create_model()
batch_size = 512
model.fit_generator(sd.data_process(batch_size=batch_size),
steps_per_epoch=sd.no_samples/batch_size, epochs=epoch, verbose=2,
callbacks=None)
model.save('Output/Model.h5', overwrite=True)
model.save_weights('Output/Weights.h5',overwrite=True)
if __name__=="__main__":
train(int(sys.argv[1]))
另一个文件是场景设计. 在训练.py我正在调用我在中创建的类scenedesc场景设计文件。你知道吗
class scenedesc():
def __init__(self):
self.vocab_size = None
self.no_samples = None
self.max_length = None
self.index_word = None
self.word_index = None
file = open("image_encodings.p", "rb")
self.image_encodings = pickle.load(file, encoding='bytes')
self.captions = None
self.img_id = None
list(self.values())
在执行训练.py文件。我得到以下错误:
File "D:\Image-caption\Image-Captioning-master\SceneDesc.py", line 24,
in __init__
list(self.values())
TypeError: 'NoneType' object is not iterable
位于场景设计文件位于list(self.values())
行。我试图解决它,但做不到。请帮我解决这个错误。你知道吗
检查类
scenedesc()
中的函数values()
,确保它返回可iterable,很可能您忘记了values()
末尾的return
关键字。你知道吗要知道的一件好事是,没有
return
关键字的函数,也就是说,没有显式地对函数进行编码以返回某个值,它将返回值None
。你知道吗正如@zvone在评论中提到的,问题似乎集中在这一行上,而且这一行没有产生您所期望的值:
对
self.values()
的调用正在返回一个None
值,而list()
希望接受某种形式的可iterable值序列,以便生成一个list
。你知道吗虽然这与您的问题没有特别的关系,但我也在想,为什么您要将
self.values
转换为一个列表,而不将新值保存在任何地方。你知道吗如前所述,该行将尝试在内存中创建一个列表,但不会保存到任何地方以供进一步使用或处理。我希望有这样的结果:
没有看到与
self.values()
生成的内容相关的实际代码,我很难进一步诊断这个问题。正如@isaac newton所提到的,如果您的self.values()
代码恰好缺少return
语句,Python将默认让函数返回一个None
值。你知道吗相关问题 更多 >
编程相关推荐