【发布时间】:2022-01-04 03:00:54
【问题描述】:
由于“Keras.Models.Sequential”需要一点时间来准备使用,这会使带有用户界面的程序冻结片刻,显然会惹恼用户。
因此,我尝试在后台的不同线程中创建模型、拟合和预测数据,然后将结果返回到主用户界面。
我尝试创建一个模型并将其放入不同的线程中。然后将模型插入到主线程的全局变量中。但是,如果我尝试从全局变量的模型中进行预测,它会永远冻结用户界面而没有任何结果。
现在我正在使用以下方法:
主要功能例如:
public int main()
{
Thread modelThread1 = new Thread(() => runModel(np.array(new float[] { 0, 1, 4, 6 }), np.array(new float[] { 0, 1, 4, 6 })));
modelThread1.Start();
Thread modelThread2 = new Thread(() => runModel(np.array(new float[] { 0, 1, 2, 3 }), np.array(new float[] { 1, 3, 5, 7 })));
modelThread2.Start();
}
这是一个简单的函数:
private void runModel(NDarray xs, NDarray ys)
{
Keras.Models.Sequential model = new Keras.Models.Sequential();
model.Add(new Dense(1, input_shape: new Shape(1)));
model.Compile(optimizer: "sgd", loss: "mean_squared_error");
model.Fit(xs, ys, epochs: 500, verbose: 0);
Console.WriteLine(model.Predict(new float[] { 11 }, verbose: 0));
}
如果我运行它,它会显示以下错误:
System.AccessViolationException: '试图读取或写入受保护的内存。这通常表明其他内存已损坏。
【问题讨论】:
标签: c# multithreading tensorflow keras