Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR adds
webgpu
support for neuralNetwork so it can be used without calledml5.setBackend
.Changes:
readSync
as @lindapaiste suggested.await tf.ready()
to theinit
function ofDiyNeuralNetwork
@lindapaiste suggested.copy
andcrossover
to async, support both promise and callback interface.The
ml5.neuralNetwork
function is technically an async operation like with other models. It should be called with a callback function or placed within p5preload
function. Our examples, however, have been treatingml5.neuralNetwork
like a synchronous function since it sometimes (when not loading data) behaves synchronously. The changes from this PR addsawait tf.ready()
thus making it definitively asynchronous.The functions
copy
andcrossover
also instantiate the neuralNetwork object, which is why they have to be async.I updated all example sketches, removing
ml5.setBackend
and moving theml5.nerualNetwork
function topreload
for non neuroevolution examples.The neuroevolution examples are kept on
cpu
backend for performance. Adapting for asynccopy
andcrossover
slightly complicates those examples but I think they are still fairly readable. Theml5.neuralNetwork
calls in neuroevolution examples are still synchronous, but they seem to not cause any error for now. I will try to come up with a clean way to adapt them to async.