点击flask按钮运行python代码,并使用tokenizer解锁文件



我正在用flask构建一个网站,当你点击一个按钮时,我正在尝试运行另一个.py文件中的机器学习代码。但当我点击该按钮时,我会收到此错误
AttributeError:无法在<模块'__main__'来自'c:filepath'
我被告知这是因为我的Tokenizer类无法取消拾取文件。但我不知道为什么它不能,因为当我自己运行机器学习代码时,它运行得很好。但当我试图点击烧瓶中的按钮时,我就会出现错误。如有任何帮助,将不胜感激

我试图运行的函数名为starter("no"(,来自一个名为Music_Generator_2.py 的文件

app.py

@app.route('/generated')
def generated():
print("start")
Music_Generator_2.start("no") #from Music_Generator_2
print("sucess")
return render_template('index.html', tested_generator="generated")

错误发生在此代码的第二行

Music_Generator_2.py

model = tf.keras.models.load_model("model_25epochs.h5", custom_objects=SeqSelfAttention.get_custom_objects())
tokenizer = pickle.load(open("tokenizer25.p", "rb"))
#generate from random
max_generate = 200
unique_notes = tokenizer.unique_word
seq_len = 200
generate = generate_from_random(unique_notes, seq_len)
generate = generate_notes(generate, model, unique_notes, max_generate, seq_len)
write_midi_file(generate, tokenizer, "rand test.mid", start=seq_len - 1, fs=7, max_generate=max_generate)
#generate from a note
max_generate = 300
unique_notes = tokenizer.unique_word  # same as above
seq_len = 300
generate = generate_from_one_note(tokenizer, "72")
generate = generate_notes(generate, model, unique_notes, max_generate, seq_len)

这是我试图在我的机器学习程序中使用的代码

Music_Generator_2.py
代币化类

class Tokenizer:
def __init__(self):
self.notes_to_index = {}
self.index_to_notes = {}
self.num_word = 0
self.unique_word = 0
self.note_freq = {}
'''transform a list of notes from strings to indexes
list_array is a list of notes in string format'''
def transform(self, list_array):
transformed = []
for i in list_array:
transformed.append([self.notes_to_index[note] for note in i])
return np.array(transformed, dtype = np.int32)
'''partial fir on the dictionary of the tokenizer
notes is a list of notes'''
def partial_fit(self, notes):
for note in notes:
note_str = ",".join(str(n) for n in note)
if note_str in self.note_freq:
self.note_freq[note_str] += 1
self.num_word += 1
else:
self.note_freq[note_str] = 1
self.unique_word += 1
self.num_word += 1
self.notes_to_index[note_str] =self.unique_word
self.index_to_notes[self.unique_word] = note_str
'''add a new note to the dictionary
note is the new note to be added as a string'''
def add_new_note(self, note):
assert note not in self.notes_to_index
self.unique_word += 1
self.notes_to_index[note] = self.unique_word
self.index_to_notes[self.unique_word] = note

已解决:我将标记化器类移动到它自己的.py文件中,然后为app.py和Mustic_Generator_2.py导入该文件。我从这里找到了解决方案

这可能是如何运行Flask的问题。你是在虚拟机内部运行它吗?如果是,请确保安装了正确的pip软件包。我会确保我运行Flask的环境与您自己运行它的环境相同,并且它可以正常工作。

最新更新