我正在创建一个简单的Rails 5应用程序。该应用程序的目标是使用统计模型进行简单的预测并显示它们。
我有一个Statistics
类(普通Ruby类),它将神经网络作为实例@attribute来进行预测。
应该只有Statistics
类的一个实例,所以我使用了singleton
mixin:
require 'singleton'
class Statistics
include Singleton
def initialize
@neuralnet = NeuralNet.new
end
def make_prediction(input)
@neuralnet.make_prediction(input)
end
def train_model(data)
@neuralnet.train(data)
end
...
end
从config/initializers/Statistics.rb
开始,我的意图是在应用初始化时初始化神经网络,因为模型需要使用数据进行训练以进行预测。我从那里调用Statistics单例实例。
# CSV reading and data importing to obtain training_data
Statistics.instance.train_model(training_data)
然后我尝试使用来自控制器的训练实例,如下所示:
@prediction = Statistics.instance.make_prediction(input)
应用加载页面时第一次预测很好。如果我试图做出另一个预测,它就会失败。我打印了object_id
并在每次加载页面后发现@neuralnet
ID更改,所以基本上我的理解是单例不起作用我每次尝试时都会得到一个全新的未经训练的模型做一个新的预测。
真的令人沮丧。请帮助我,我不知道我对Singleton行为的理解是否正确,或者我是否应该使用单身人士。我只需要一个训练好的神经网络的单个实例并从我的控制器中调用它......我怎么能实现它?