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

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

@ -65,6 +65,15 @@ FluidMLPRegressor : FluidModelObject {
this.prSendMsg(this.predictPointMsg(sourceBuffer, targetBuffer)); 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| kr{|trig, inputBuffer,outputBuffer, tapIn = 0, tapOut = -1|
var params; var params;
tapIn = tapIn ? this.tapIn; tapIn = tapIn ? this.tapIn;
@ -78,6 +87,17 @@ FluidMLPRegressor : FluidModelObject {
^FluidMLPRegressorQuery.kr(trig,this, *params); ^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 { FluidMLPRegressorQuery : FluidRTMultiOutUGen {
@ -151,6 +171,27 @@ FluidMLPClassifier : FluidModelObject {
this.prSendMsg(this.predictPointMsg(sourceBuffer)); 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| kr{|trig, inputBuffer,outputBuffer|
var params = [this.prEncodeBuffer(inputBuffer), var params = [this.prEncodeBuffer(inputBuffer),

Loading…
Cancel
Save