Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP/Broken]: Upgrade @tensorflow/tfjs versions to 3.x #1383

Draft
wants to merge 11 commits into
base: main
Choose a base branch
from

Conversation

lindapaiste
Copy link
Contributor

@lindapaiste lindapaiste commented May 9, 2022

Extends #1379
Related issue: #1337

I have installed version ^3.16.0 of all @tensorflow/tfjs packages. But a lot of things broke in the process. These are some of the known errors which need to be addressed:


  • SoundClassifier

The tfjs speechcommands model expects tensorflow version ^1.1.2. Attempting to run on 3.x causes errors regarding undefined Node.js variables path and process. This is the worst one as it actually breaks the whole build. I had to temporarily disable the model.

...But then I re-enabled and I couldn't reproduce the error 🤷


  • BodyPix

Expects tensorflow version ~1.2.1. There is a newer version of bodypix available, but the API is very different.

Error stack
Uncaught (in promise) TypeError: e.depthwiseConv2D is not a function
    at e.separableConv (body-pix.esm.js:17:4034)
    at body-pix.esm.js:17:3533
    at Array.reduce (<anonymous>)
    at e.predict (body-pix.esm.js:17:3366)
    at body-pix.esm.js:17:7396
    at engine.js:328:1
    at Engine.scopedRun (engine.js:338:1)
    at Engine.tidy (engine.js:327:1)
    at tidy (globals.js:175:12)
    at e.predictForSegmentation (body-pix.esm.js:17:7384)

  | e.separableConv | @ | body-pix.esm.js:17
-- | -- | -- | --
  | (anonymous) | @ | body-pix.esm.js:17
  | e.predict | @ | body-pix.esm.js:17
  | (anonymous) | @ | body-pix.esm.js:17
  | (anonymous) | @ | engine.js:328
  | scopedRun | @ | engine.js:338
  | tidy | @ | engine.js:327
  | tidy | @ | globals.js:175
  | e.predictForSegmentation | @ | body-pix.esm.js:17
  | (anonymous) | @ | body-pix.esm.js:17
  | (anonymous) | @ | engine.js:328
  | scopedRun | @ | engine.js:338
  | tidy | @ | engine.js:327
  | tidy | @ | globals.js:175
  | e.estimatePersonSegmentationActivation | @ | body-pix.esm.js:17
  | (anonymous) | @ | body-pix.esm.js:17
  | (anonymous) | @ | body-pix.esm.js:17
  | (anonymous) | @ | body-pix.esm.js:17
  | (anonymous) | @ | body-pix.esm.js:17
  | __awaiter | @ | body-pix.esm.js:17
  | e.estimatePersonSegmentation | @ | body-pix.esm.js:17
  | _callee5$ | @ | index.js:298
  | tryCatch | @ | runtime.js:63
  | invoke | @ | runtime.js:294
  | (anonymous) | @ | runtime.js:119
  | asyncGeneratorStep | @ | asyncToGenerator.js:3
  | _next | @ | asyncToGenerator.js:25
  | await in _next (async) |   |  
  | (anonymous) | @ | sketch.js:28

  • Facemesh

facemesh expects tensorflow version ^2.1.0 and its internal dependency blazeface expects 1.5.2. There is a newer version available under the package name @tensorflow-models/face-landmarks-detection.

I saw an error once, and then when I refreshed the page everything was fine! 🤷

Error stack
ml5.js:13317 Uncaught (in promise) ReferenceError: o is not defined
    at ml5.js:13317:3843
    at ml5.js:68126:22
    at Engine.scopedRun (ml5.js:68136:25)
    at Engine.tidy (ml5.js:68125:21)
    at tidy (ml5.js:69377:59)
    at M.getBoundingBoxes (ml5.js:13317:3784)
    at e.<anonymous> (ml5.js:13317:11091)
    at ml5.js:13317:1452
    at Object.next (ml5.js:13317:1557)
    at ml5.js:13317:494

(anonymous) | @ | ml5.js:13317
-- | -- | --
  | (anonymous) | @ | ml5.js:68126
  | scopedRun | @ | ml5.js:68136
  | tidy | @ | ml5.js:68125
  | tidy | @ | ml5.js:69377
  | getBoundingBoxes | @ | ml5.js:13317
  | (anonymous) | @ | ml5.js:13317
  | (anonymous) | @ | ml5.js:13317
  | (anonymous) | @ | ml5.js:13317
  | (anonymous) | @ | ml5.js:13317
  | y | @ | ml5.js:13317
  | e.predict | @ | ml5.js:13317
  | (anonymous) | @ | ml5.js:13317
  | (anonymous) | @ | ml5.js:13317
  | (anonymous) | @ | ml5.js:13317
  | (anonymous) | @ | ml5.js:13317
  | y | @ | ml5.js:13317
  | t.estimateFaces | @ | ml5.js:13317
  | _callee2$ | @ | ml5.js:281864
  | tryCatch | @ | ml5.js:10802
  | invoke | @ | ml5.js:11033
  | (anonymous) | @ | ml5.js:10858
  | asyncGeneratorStep | @ | ml5.js:10354
  | _next | @ | ml5.js:10376
  | (anonymous) | @ | ml5.js:10383
  | (anonymous) | @ | ml5.js:10372
  | predict | @ | ml5.js:281899
  | modelReady | @ | sketch.js:30
  | doingPreloads | @ | ml5.js:294296
  | (anonymous) | @ | ml5.js:293315
  | Promise.then (async) |   |  
  | asyncGeneratorStep | @ | ml5.js:10364
  | _next | @ | ml5.js:10376
  | (anonymous) | @ | ml5.js:10383
  | (anonymous) | @ | ml5.js:10372
  | predict | @ | ml5.js:281899
  | modelReady | @ | sketch.js:30
  | doingPreloads | @ | ml5.js:294296
  | (anonymous) | @ | ml5.js:293315
  | Promise.then (async) |   |  
  | (anonymous) | @ | ml5.js:293314
  | callCallback | @ | ml5.js:293313
  | Facemesh | @ | ml5.js:281778
  | facemesh | @ | ml5.js:281947
  | preloads | @ | ml5.js:294292
  | imageReady | @ | sketch.js:20
  | t.onload | @ | p5.dom.min.js:3
  | load (async) |   |  
  | d.createImg | @ | p5.dom.min.js:3
  | setup | @ | sketch.js:11
  | (anonymous) | @ | p5.min.js:3
  | (anonymous) | @ | p5.min.js:3
  | h | @ | p5.min.js:3
  | n | @ | p5.min.js:3
  | load (async) |   |  
  | 21.../core/main | @ | p5.min.js:3
  | l | @ | p5.min.js:3
  | (anonymous) | @ | p5.min.js:3
  | 12../color/color_conversion | @ | p5.min.js:3
  | l | @ | p5.min.js:3
  | o | @ | p5.min.js:3
  | (anonymous) | @ | p5.min.js:3
  | (anonymous) | @ | p5.min.js:3
  | (anonymous) | @ | p5.min.js:3

  • FaceApi

face-api.js depends on tensorflow version 1.7.0 (not a range, that exact version). I don't know what the future of this package is. Maybe we can implement it using a different model behind the scenes. Maybe we don't need it at all since we have Facemesh. I believe there are forks of face-api.js out there which have updated dependencies.

Error stack
Uncaught (in promise) TypeError: forwardFunc is not a function
    at engine.js:512:1
    at engine.js:328:1
    at Engine.scopedRun (engine.js:338:1)
    at Engine.tidy (engine.js:327:1)
    at kernelFunc (engine.js:512:1)
    at engine.js:533:1
    at Engine.scopedRun (engine.js:338:1)
    at Engine.runKernelFunc (engine.js:529:1)
    at Module.Hn (tf-core.esm.js:17:80734)
    at normalize.js:6:21

(anonymous) | @ | engine.js:512
-- | -- | --
  | (anonymous) | @ | engine.js:328
  | scopedRun | @ | engine.js:338
  | tidy | @ | engine.js:327
  | kernelFunc | @ | engine.js:512
  | (anonymous) | @ | engine.js:533
  | scopedRun | @ | engine.js:338
  | runKernelFunc | @ | engine.js:529
  | Hn | @ | tf-core.esm.js:17
  | (anonymous) | @ | normalize.js:6
  | (anonymous) | @ | engine.js:328
  | scopedRun | @ | engine.js:338
  | tidy | @ | engine.js:327
  | Ze | @ | tf-core.esm.js:17
  | normalize | @ | normalize.js:4
  | (anonymous) | @ | TinyYolov2Base.js:92
  | (anonymous) | @ | engine.js:328
  | scopedRun | @ | engine.js:338
  | tidy | @ | engine.js:327
  | Ze | @ | tf-core.esm.js:17
  | TinyYolov2Base.forwardInput | @ | TinyYolov2Base.js:89
  | (anonymous) | @ | TinyYolov2Base.js:126
  | step | @ | tslib.es6.js:100
  | (anonymous) | @ | tslib.es6.js:81
  | fulfilled | @ | tslib.es6.js:71
  | Promise.then (async) |   |  
  | step | @ | tslib.es6.js:73
  | (anonymous) | @ | tslib.es6.js:74
  | __awaiter | @ | tslib.es6.js:70
  | ComposableTask.then | @ | ComposableTask.js:6
  | requestAnimationFrame (async) |   |  
  | (anonymous) | @ | browser_util.js:37
  | nextFrame | @ | browser_util.js:37
  | _callee5$ | @ | index.js:307
  | tryCatch | @ | runtime.js:63
  | invoke | @ | runtime.js:294
  | (anonymous) | @ | runtime.js:119
  | asyncGeneratorStep | @ | asyncToGenerator.js:3
  | _next | @ | asyncToGenerator.js:25
  | Promise.then (async) |   |  
  | asyncGeneratorStep | @ | asyncToGenerator.js:13
  | _next | @ | asyncToGenerator.js:25
  | (anonymous) | @ | asyncToGenerator.js:32
  | (anonymous) | @ | asyncToGenerator.js:21
  | detectSingleInternal | @ | index.js:305
  | _callee4$ | @ | index.js:297
  | tryCatch | @ | runtime.js:63
  | invoke | @ | runtime.js:294
  | (anonymous) | @ | runtime.js:119
  | asyncGeneratorStep | @ | asyncToGenerator.js:3
  | _next | @ | asyncToGenerator.js:25
  | (anonymous) | @ | asyncToGenerator.js:32
  | (anonymous) | @ | asyncToGenerator.js:21
  | detectSingle | @ | index.js:250
  | modelReady | @ | sketch.js:34
  | (anonymous) | @ | callcallback.js:32
  | Promise.then (async) |   |  
  | (anonymous) | @ | callcallback.js:31
  | callCallback | @ | callcallback.js:29
  | FaceApiBase | @ | index.js:80
  | faceApi | @ | index.js:481
  | make | @ | sketch.js:23
  | (anonymous) | @ | sketch.js:29

  • SketchRNN

@magenta/sketch expects tensorflow version ^1.0.2. We have a few options here:

  • We can attempt to update the dependencies on their end and put in a PR at their repo.
  • We can copy their model code in our repo. We can potentially combine parts of SketchRNN and CharRNN into a generic LSTMmodel or RNNmodel. This would be cool and might make it easier to add other LSTM models in the future.
Error stack
Uncaught (in promise) TypeError: forwardFunc is not a function
    at engine.js:512:1
    at engine.js:328:1
    at Engine.scopedRun (engine.js:338:1)
    at Engine.tidy (engine.js:327:1)
    at kernelFunc (engine.js:512:1)
    at engine.js:533:1
    at Engine.scopedRun (engine.js:338:1)
    at Engine.runKernelFunc (engine.js:529:1)
    at concat_ (tf-core.esm.js:17:82208)
    at concat (tf-core.esm.js:17:71801)

(anonymous) | @ | engine.js:512
-- | -- | --
  | (anonymous) | @ | engine.js:328
  | scopedRun | @ | engine.js:338
  | tidy | @ | engine.js:327
  | kernelFunc | @ | engine.js:512
  | (anonymous) | @ | engine.js:533
  | scopedRun | @ | engine.js:338
  | runKernelFunc | @ | engine.js:529
  | concat_ | @ | tf-core.esm.js:17
  | concat | @ | tf-core.esm.js:17
  | concat2d_ | @ | tf-core.esm.js:17
  | concat2d | @ | tf-core.esm.js:17
  | __webpack_modules__../node_modules/@magenta/sketch/es5/sketch_rnn/model.js.SketchRNN.instantiateFromJSON | @ | model.js:71
  | (anonymous) | @ | model.js:91
  | step | @ | model.js:32
  | (anonymous) | @ | model.js:13
  | fulfilled

  • MobileNet/ImageClassifier

The code runs without error but the prediction is incorrect.

image


  • Pix2Pix

The initial drawing in the example runs correctly. However I get an error when drawing on the canvas and clicking "Transfer".

It seems most likely due to some tensor getting disposed too early.

Error stack
Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'backend')
    at Engine.moveData (engine.js:289:1)
    at DataStorage.get (backend.js:29:1)
    at Object.conv2DBackpropInput [as kernelFunc] (Conv2DBackpropInput.js:31:1)
    at kernelFunc (engine.js:472:1)
    at engine.js:533:1
    at Engine.scopedRun (engine.js:338:1)
    at Engine.runKernelFunc (engine.js:529:1)
    at Engine.runKernel (engine.js:402:1)
    at conv2DBackpropInput_ (conv2d_backprop_input.js:74:17)
    at conv2DBackpropInput__op (operation.js:44:1)

  | moveData | @ | engine.js:289
-- | -- | -- | --
  | get | @ | backend.js:29
  | conv2DBackpropInput | @ | Conv2DBackpropInput.js:31
  | kernelFunc | @ | engine.js:472
  | (anonymous) | @ | engine.js:533
  | scopedRun | @ | engine.js:338
  | runKernelFunc | @ | engine.js:529
  | runKernel | @ | engine.js:402
  | conv2DBackpropInput_ | @ | conv2d_backprop_input.js:74
  | conv2DBackpropInput__op | @ | operation.js:44
  | conv2dTranspose_ | @ | conv2d_transpose.js:27
  | conv2dTranspose__op | @ | operation.js:44
  | (anonymous) | @ | index.js:153
  | (anonymous) | @ | engine.js:328
  | scopedRun | @ | engine.js:338
  | tidy | @ | engine.js:327
  | tidy | @ | globals.js:175
  | deconv2d | @ | index.js:152
  | (anonymous) | @ | index.js:90
  | (anonymous) | @ | engine.js:328
  | scopedRun | @ | engine.js:338
  | tidy | @ | engine.js:327
  | tidy | @ | globals.js:175
  | _callee3$ | @ | index.js:52
  | tryCatch | @ | runtime.js:63
  | invoke | @ | runtime.js:294
  | (anonymous) | @ | runtime.js:119
  | asyncGeneratorStep | @ | asyncToGenerator.js:3
  | _next | @ | asyncToGenerator.js:25
  | (anonymous) | @ | asyncToGenerator.js:32


  • StyleTransfer

I wonder if tensorflow changed the default dtype for certain tensors, based on the error that I get.

Error stack
Uncaught (in promise) Error: Argument 'x' passed to 'conv2d' must be float32 tensor, but got int32 tensor
    at assertDtype (tensor_util_env.js:66:1)
    at convertToTensor (tensor_util_env.js:72:1)
    at conv2d_ (conv2d.js:57:31)
    at Module.conv2d__op (operation.js:44:1)
    at index.js:112:17
    at engine.js:328:1
    at Engine.scopedRun (engine.js:338:1)
    at Engine.tidy (engine.js:327:1)
    at Module.tidy (globals.js:175:12)
    at StyleTransfer.convLayer (index.js:111:12)

  | assertDtype | @ | tensor_util_env.js:66
-- | -- | -- | --
  | convertToTensor | @ | tensor_util_env.js:72
  | conv2d_ | @ | conv2d.js:57
  | conv2d__op | @ | operation.js:44
  | (anonymous) | @ | index.js:112
  | (anonymous) | @ | engine.js:328
  | scopedRun | @ | engine.js:338
  | tidy | @ | engine.js:327
  | tidy | @ | globals.js:175
  | convLayer | @ | index.js:111
  | (anonymous) | @ | index.js:189
  | (anonymous) | @ | engine.js:328
  | scopedRun | @ | engine.js:338
  | tidy | @ | engine.js:327
  | tidy | @ | globals.js:175
  | _callee4$ | @ | index.js:188
  | tryCatch | @ | runtime.js:63
  | invoke | @ | runtime.js:294
  | (anonymous) | @ | runtime.js:119
  | asyncGeneratorStep | @ | asyncToGenerator.js:3
  | _next | @ | asyncToGenerator.js:25
  | (anonymous) | @ | asyncToGenerator.js:32
  | (anonymous) | @ | asyncToGenerator.js:21
  | transferInternal | @ | index.js:186
  | _callee3$ | @ | index.js:178
  | tryCatch | @ | runtime.js:63
  | invoke | @ | runtime.js:294
  | (anonymous) | @ | runtime.js:119
  | asyncGeneratorStep | @ | asyncToGenerator.js:3
  | _next | @ | asyncToGenerator.js:25
  | (anonymous) | @ | asyncToGenerator.js:32
  | (anonymous) | @ | asyncToGenerator.js:21
  | transfer | @ | index.js:157
  | (anonymous) | @ | sketch.js:18
  | Promise.then (async) |   |  
  | (anonymous) | @ | sketch.js:19

There might be others too, but this is plenty for me to work on!

@RonHouben
Copy link

RonHouben commented Dec 23, 2022

@lindapaiste , not to pressure you but is there any progress on this?
Currently the following amount of vulnerabilities are showing up:
27 vulnerabilities (17 low, 10 high)

Here a npm audit report:
`

npm audit report

d3-color <3.1.0
Severity: high
d3-color vulnerable to ReDoS - GHSA-36jr-mh4h-2g58
fix available via npm audit fix
node_modules/d3-color
d3-interpolate 0.1.3 - 2.0.1
Depends on vulnerable versions of d3-color
node_modules/d3-interpolate
d3-scale 0.1.5 - 3.3.0
Depends on vulnerable versions of d3-interpolate
node_modules/d3-scale
vega-scale <=7.1.1
Depends on vulnerable versions of d3-interpolate
Depends on vulnerable versions of d3-scale
node_modules/vega-scale
vega 3.0.0-beta.0 - 3.3.1 || 5.0.0-rc1 - 5.21.0
Depends on vulnerable versions of vega-encode
Depends on vulnerable versions of vega-functions
Depends on vulnerable versions of vega-geo
Depends on vulnerable versions of vega-scale
node_modules/vega
@tensorflow/tfjs-vis *
Depends on vulnerable versions of glamor
Depends on vulnerable versions of vega
node_modules/@tensorflow/tfjs-vis
vega-encode <=4.8.3
Depends on vulnerable versions of d3-interpolate
node_modules/vega-encode
vega-functions <=5.12.1
Depends on vulnerable versions of d3-color
node_modules/vega-functions
vega-geo 4.2.0 - 4.3.8
Depends on vulnerable versions of d3-color
node_modules/vega-geo

node-fetch <=2.6.6
Severity: high
The size option isn't honored after following a redirect in node-fetch - GHSA-w7rc-rwvf-8q5r
node-fetch is vulnerable to Exposure of Sensitive Information to an Unauthorized Actor - GHSA-r683-j2x4-v87g
fix available via npm audit fix --force
Will install [email protected], which is a breaking change
node_modules/isomorphic-fetch/node_modules/node-fetch
node_modules/node-fetch
@tensorflow/tfjs-core 1.1.0 - 2.4.0
Depends on vulnerable versions of node-fetch
node_modules/@tensorflow/tfjs-core
node_modules/@tensorflow/tfjs/node_modules/@tensorflow/tfjs-core
node_modules/face-api.js/node_modules/@tensorflow/tfjs-core
@tensorflow-models/blazeface <=0.0.5
Depends on vulnerable versions of @tensorflow/tfjs-converter
Depends on vulnerable versions of @tensorflow/tfjs-core
node_modules/ml5/node_modules/@tensorflow-models/facemesh/node_modules/@tensorflow-models/blazeface
@tensorflow-models/facemesh *
Depends on vulnerable versions of @tensorflow-models/blazeface
Depends on vulnerable versions of @tensorflow/tfjs-converter
Depends on vulnerable versions of @tensorflow/tfjs-core
node_modules/ml5/node_modules/@tensorflow-models/facemesh
@tensorflow-models/body-pix 1.1.0 - 2.0.5
Depends on vulnerable versions of @tensorflow/tfjs-converter
Depends on vulnerable versions of @tensorflow/tfjs-core
node_modules/@tensorflow-models/body-pix
@tensorflow-models/handpose <=0.0.5
Depends on vulnerable versions of @tensorflow/tfjs-converter
Depends on vulnerable versions of @tensorflow/tfjs-core
node_modules/ml5/node_modules/@tensorflow-models/handpose
@tensorflow-models/knn-classifier 1.2.0 - 1.2.2
Depends on vulnerable versions of @tensorflow/tfjs-core
node_modules/@tensorflow-models/knn-classifier
ml5 0.3.0 - 0.12.2
Depends on vulnerable versions of @magenta/sketch
Depends on vulnerable versions of @tensorflow-models/body-pix
Depends on vulnerable versions of @tensorflow-models/facemesh
Depends on vulnerable versions of @tensorflow-models/handpose
Depends on vulnerable versions of @tensorflow-models/knn-classifier
Depends on vulnerable versions of @tensorflow-models/mobilenet
Depends on vulnerable versions of @tensorflow-models/speech-commands
Depends on vulnerable versions of @tensorflow/tfjs
Depends on vulnerable versions of @tensorflow/tfjs-converter
Depends on vulnerable versions of @tensorflow/tfjs-core
Depends on vulnerable versions of face-api.js
node_modules/ml5
@tensorflow-models/mobilenet 2.0.2 - 2.0.4
Depends on vulnerable versions of @tensorflow/tfjs-converter
Depends on vulnerable versions of @tensorflow/tfjs-core
node_modules/@tensorflow-models/mobilenet
@tensorflow/tfjs 0.14.0 - 2.4.0
Depends on vulnerable versions of @tensorflow/tfjs-converter
Depends on vulnerable versions of @tensorflow/tfjs-core
Depends on vulnerable versions of @tensorflow/tfjs-data
Depends on vulnerable versions of @tensorflow/tfjs-layers
node_modules/@tensorflow/tfjs
@magenta/sketch >=0.2.0
Depends on vulnerable versions of @tensorflow/tfjs
node_modules/@magenta/sketch
@tensorflow-models/speech-commands 0.2.3 - 0.4.2
Depends on vulnerable versions of @tensorflow/tfjs
node_modules/@tensorflow-models/speech-commands
@tensorflow/tfjs-converter 1.1.0 - 2.4.0
Depends on vulnerable versions of @tensorflow/tfjs-core
node_modules/@tensorflow/tfjs-converter
node_modules/@tensorflow/tfjs/node_modules/@tensorflow/tfjs-converter
@tensorflow/tfjs-data <=2.4.0
Depends on vulnerable versions of @tensorflow/tfjs-core
Depends on vulnerable versions of node-fetch
node_modules/@tensorflow/tfjs/node_modules/@tensorflow/tfjs-data
@tensorflow/tfjs-layers 1.1.0 - 2.4.0
Depends on vulnerable versions of @tensorflow/tfjs-core
node_modules/@tensorflow/tfjs/node_modules/@tensorflow/tfjs-layers
face-api.js >=0.20.1
Depends on vulnerable versions of @tensorflow/tfjs-core
node_modules/face-api.js
isomorphic-fetch 2.0.0 - 2.2.1
Depends on vulnerable versions of node-fetch
node_modules/isomorphic-fetch
fbjs 0.7.0 - 1.0.0
Depends on vulnerable versions of isomorphic-fetch
node_modules/fbjs
glamor >=2.17.10
Depends on vulnerable versions of fbjs
node_modules/glamor

28 vulnerabilities (18 low, 10 high)

To address issues that do not require attention, run:
npm audit fix
`

@lindapaiste
Copy link
Contributor Author

lindapaiste commented Feb 26, 2024

@shiffman The models which I specified as needing work are the ones that your team has been working on re-implementing. My recollection is that all of the rest seemed fine. I wonder if it makes sense to use the new repo to work out the kinks, and then once you've got those models working to copy that code back over to this repo. Then bump the dependencies and delete the 1 or 2 broken models which we didn't update. It seems like a total pain to have to copy everything over to the new repo, and makes it harder to apply changes from current PRs.

This was for TFJS 3.x and they are up to 4.x now but they say that's a non-breaking version change.
https://www.tensorflow.org/js/tutorials/upgrading_to_4_0 (the page title says 3.0 🙃)
https://www.tensorflow.org/js/tutorials/upgrading_to_3_0
https://github.com/tensorflow/tfjs/releases/tag/tfjs-v4.0.0

@shiffman
Copy link
Member

@shiffman The models which I specified as needing work are the ones that your team has been working on re-implementing. My recollection is that all of the rest seemed fine. I wonder if it makes sense to use the new repo to work out the kinks, and then once you've got those models working to copy that code back over to this repo. Then bump the dependencies and delete the 1 or 2 broken models which we didn't update. It seems like a total pain to have to copy everything over to the new repo, and makes it harder to apply changes from current PRs.

This was for TFJS 3.x and they are up to 4.x now but they say that's a non-breaking version change. https://www.tensorflow.org/js/tutorials/upgrading_to_4_0 (the page title says 3.0 🙃) https://www.tensorflow.org/js/tutorials/upgrading_to_3_0 https://github.com/tensorflow/tfjs/releases/tag/tfjs-v4.0.0

Thank you for the info @lindapaiste! I understand, it's a tricky tradeoff. I think we have changed so much about the approach to which the library is developed and maintained that keeping with the new repo as a "fresh start" is preferable. This repo would get archived and "frozen in time" and we would point back towards and highlight issues, discussion, and code contributions that are relevant. We have a meeting at NYU tomorrow and I will bring this up for discussion!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants