在Python中,我可以从主函数中调用变量吗?使用全局变量?任何帮助都将不胜感激!
def main(dataset, n_h, n_y, batch_size, dev_split, n_epochs): input_to_state = Linear(name='input_to_state', input_dim=seq_u.shape[-1], output_dim=n_h) global RNN # 正确吗? RNN = SimpleRecurrent(activation=Tanh(), dim=n_h, name="RNN")def predict(dev_X): dev_transform = main.input_to_state.apply(dev_X) #? 调用 "input_to_state",哪个是正确的? dev_transform = input_to_state.apply(dev_X) #? dev_h = main.RNN.apply(dev_transform) #? 调用 "RNN",哪个是正确的? dev_h = RNN.apply(dev_transform) #?if __name__ == "__main__": def predict(dev_X): # 另一个问题:可以在这里添加predict函数吗? dataset = .... main(dataset, n_h, n_y, batch_size, dev_split, 5000) get_predictions = theano.function([dev_X], predict) # 调用predict函数
回答:
你必须在’main’函数之外定义’input_to_state’和’RNN’,然后再修改它们。像这样:
input_to_state = NoneRNN = Nonedef main(dataset, n_h, n_y, batch_size, dev_split, n_epochs): # 使用'global'可以让你修改这些变量 global input_to_state global RNN input_to_state = Linear(name='input_to_state', input_dim=seq_u.shape[-1], output_dim=n_h) RNN = SimpleRecurrent(activation=Tanh(), dim=n_h, name="RNN")def predict(dev_X): dev_transform = input_to_state.apply(dev_X) dev_h = RNN.apply(dev_transform)if __name__ == "__main__": main(args) predict(dev_X)
然而,我不推荐这样做,全局变量应该尽量少用。 更多详情请点击这里。
更好的解决方案是在main函数结束时返回’input_to_state’和’RNN’,像这样:
def main(dataset, n_h, n_y, batch_size, dev_split, n_epochs): input_to_state = Linear(name='input_to_state', input_dim=seq_u.shape[-1], output_dim=n_h) RNN = SimpleRecurrent(activation=Tanh(), dim=n_h, name="RNN") return input_to_state, RNNdef predict(dev_X, input_to_state, RNN): dev_transform = input_to_state.apply(dev_X) dev_h = RNN.apply(dev_transform)if __name__ == "__main__": input_to_state, RNN = main(args) predict(dev_X, input_to_state, RNN)