Add param referesh to NRT wrapper; update MLP read in sclang

nix
Owen Green 4 years ago
parent f63ae2cab3
commit 56bd523bcd

@ -14,6 +14,8 @@ struct FluidSCMessaging{
static auto getInterfaceTable(){ return FluidSCWrapper::getInterfaceTable(); }
static auto getName(){ return FluidSCWrapper::getName(); }
using Params = typename Client::ParamSetType;
using ParamValues = typename Params::ValueTuple;
template <size_t N>
struct MessageDispatchCmd
@ -117,6 +119,13 @@ struct FluidSCMessaging{
return willContinue;
}
static void refreshParams(Params& p, MessageResult<ParamValues>& r)
{
p.fromTuple(ParamValues(r));
}
template<typename T>
static void refreshParams(Params&,MessageResult<T>&){}
template<size_t N>
static void doMessage(World* inWorld, void* inUserData, struct sc_msg_iter* args, void* replyAddr)
@ -168,6 +177,8 @@ struct FluidSCMessaging{
if (!m->result.ok())
FluidSCWrapper::printResult(world, m->result);
else
refreshParams(ptr->mParams, m->result);
} else FluidSCWrapper::printNotFound(m->id);
return true;

@ -23,8 +23,9 @@ namespace impl {
template <typename Client, typename Wrapper>
class NonRealTime : public SCUnit
{
public:
using Params = typename Client::ParamSetType;
private:
template <typename T, typename... Args>
static T* rtalloc(World* world, Args&&... args)
{

@ -65,6 +65,15 @@ FluidMLPRegressor : FluidModelObject {
this.prSendMsg(this.predictPointMsg(sourceBuffer, targetBuffer));
}
read { |filename, action|
actions[\read] = [numbers(FluidMessageResponse,_,nil,_), {
|data|
this.prUpdateParams(data);
action.value;
}];
this.prSendMsg(this.readMsg(filename));
}
kr{|trig, inputBuffer,outputBuffer, tapIn = 0, tapOut = -1|
var params;
tapIn = tapIn ? this.tapIn;
@ -78,6 +87,17 @@ FluidMLPRegressor : FluidModelObject {
^FluidMLPRegressorQuery.kr(trig,this, *params);
}
prUpdateParams{|data|
var rest = data.keep(-9);
this.hidden_(data.drop(1).drop(-9).copy);
[\activation_, \outputActivation_,
\tapIn_, \tapOut_, \maxIter_,
\learnRate_, \momentum_,
\batchSize_, \validation_]
.do{|prop,i|
this.performList(prop,rest[i]);
};
}
}
FluidMLPRegressorQuery : FluidRTMultiOutUGen {
@ -151,6 +171,27 @@ FluidMLPClassifier : FluidModelObject {
this.prSendMsg(this.predictPointMsg(sourceBuffer));
}
read { |filename, action|
actions[\read] = [numbers(FluidMessageResponse,_,nil,_), {
|data|
this.prUpdateParams(data);
action.value;
}];
this.prSendMsg(this.readMsg(filename));
}
prUpdateParams{|data|
var rest = data.keep(-6);
this.hidden_(data.drop(1).drop(-6).copy);
[\activation_, \maxIter_,
\learnRate_, \momentum_,
\batchSize_, \validation_]
.do{|prop,i|
this.performList(prop,rest[i]);
};
}
kr{|trig, inputBuffer,outputBuffer|
var params = [this.prEncodeBuffer(inputBuffer),

Loading…
Cancel
Save