将函数/方法传递给python脚本

2024-09-30 20:37:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我在google colab单元格中定义了这个方法/函数

[5]:def lstm_model2(input_features, timesteps, regularizers=regularizers, batch_size=10):

       model = Sequential()
       model.add(LSTM(15, batch_input_shape=(batch_size, timesteps, 
          input_features), stateful=True,
                   recurrent_regularizer=regularizers))
       model.add(Dense(1))
       model.compile(loss='mae', optimizer='adam')

       return  model

我想通过argparse将这个方法传递给我正在下一个单元格中执行的脚本。你知道吗

[6]:!python statefulv2.py --model=lstm_model2

我尝试了一种类似于type argument in argparse的方法,比如在statefulv2.py脚本中定义一个同名的抽象方法,这样argparse.add_argument('--model', help='LSTM model', type=lstm_model2, required=True)就可以在statefulv2.py中编写,但这会产生一个无效的参数错误。你知道吗

在argparse中有没有一种简洁的方法将方法作为参数传递?你知道吗

之所以将该方法保留在外部,是因为GoogleColab没有为在单独的文件中更改模型提供单独的编辑器,所以要编辑它来尝试不同的函数。你知道吗


Tags: 方法函数pyaddinputmodel定义batch
1条回答
网友
1楼 · 发布于 2024-09-30 20:37:18

你最好不要试图传递这样的论点。坚持基本类型。另一种方法是将不同的模型存储在models.py这样的文件中,例如:

def lstm_model1(...):
    # Definition of model1

def lstm_model2(...):
    # Definition of model2

等等。你知道吗

statefulv2.py中,您可以拥有:

import models
import argparse

parser = ...
parser.add_argument('-m', " model", help='LSTM model', 
                      type=str, choices=['model1', 'model2'], required=True)

model_dict = {'model1': models.lstm_model1(...),
              'model2': models.lstm_model2(...)}

args = parser.parse_args()

my_model = model_dict[args.model]

编辑:如果不允许将模型保存到文件。你知道吗

如果必须找到解决方法,可以将代码保存在缓冲区文件中,该文件可以作为open类型的参数读入statefulv2.py。下面是一个演示:

在Colab单元格中,将函数代码写入字符串:

def save_code_to_file():
    func_string = """
def lstm_model3():
    print ("Hey!")
"""
    with open("buffer", "w") as f:
        f.write(func_string)

statefulv2.py中,您可以:

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('-m', " model", help='LSTM model', type=open, required=True)

args = parser.parse_args()

lines = args.model.readlines()

model_def = ""
for line in lines:
    model_def += line

exec(model_def)

lstm_model3()

输出(在iPython中,为Colab相应地更改它):

In [25]: %run statefulv2.py -m buffer                                                  
Hey!

相关问题 更多 >