(
path: string, tags = ['serve'],
signature = 'serving_default')
| 391 | * @doc {heading: 'Models', subheading: 'SavedModel', namespace: 'node'} |
| 392 | */ |
| 393 | export async function loadSavedModel( |
| 394 | path: string, tags = ['serve'], |
| 395 | signature = 'serving_default'): Promise<TFSavedModel> { |
| 396 | ensureTensorflowBackend(); |
| 397 | |
| 398 | const backend = nodeBackend(); |
| 399 | |
| 400 | const savedModelInfo = await getMetaGraphsFromSavedModel(path); |
| 401 | const signatureDefEntry = |
| 402 | getSignatureDefEntryFromMetaGraphInfo(savedModelInfo, tags, signature); |
| 403 | |
| 404 | let sessionId: number; |
| 405 | |
| 406 | for (const id of Array.from(loadedSavedModelPathMap.keys())) { |
| 407 | const modelInfo = loadedSavedModelPathMap.get(id); |
| 408 | if (modelInfo.path === path && |
| 409 | stringArraysHaveSameElements(modelInfo.tags, tags)) { |
| 410 | sessionId = modelInfo.sessionId; |
| 411 | } |
| 412 | } |
| 413 | if (sessionId == null) { |
| 414 | // Convert metagraph tags string array to a string. |
| 415 | const tagsString = tags.join(','); |
| 416 | sessionId = backend.loadSavedModelMetaGraph(path, tagsString); |
| 417 | } |
| 418 | const id = nextTFSavedModelId++; |
| 419 | const savedModel = |
| 420 | new TFSavedModel(sessionId, id, signatureDefEntry, backend); |
| 421 | loadedSavedModelPathMap.set(id, {path, tags, sessionId}); |
| 422 | return savedModel; |
| 423 | } |
| 424 | |
| 425 | /** |
| 426 | * Compare if two unsorted arrays of string have the same elements. |
nothing calls this directly
no test coverage detected
searching dependent graphs…