diff --git a/tensorflow/tensorboard/components/vz_projector/data-provider-demo.ts b/tensorflow/tensorboard/components/vz_projector/data-provider-demo.ts
index a839ad4a0b3..643862c797a 100644
--- a/tensorflow/tensorboard/components/vz_projector/data-provider-demo.ts
+++ b/tensorflow/tensorboard/components/vz_projector/data-provider-demo.ts
@@ -20,69 +20,15 @@ import * as logging from './logging';
/** Data provider that loads data from a demo folder. */
export class DemoDataProvider implements DataProvider {
- /** List of demo datasets for showing the capabilities of the tool. */
- private DEMO_CONFIG: ProjectorConfig = {
- embeddings: [
- {
- tensorName: 'Word2Vec 5K',
- tensorShape: [5000, 200],
- tensorPath: 'word2vec_5000_200d_tensors.tsv',
- metadataPath: 'word2vec_5000_200d_labels.tsv'
- },
- {
- tensorName: 'Word2Vec 10K',
- tensorShape: [10000, 200],
- tensorPath: 'word2vec_10000_200d_tensors.tsv',
- metadataPath: 'word2vec_10000_200d_labels.tsv'
- },
- {
- tensorName: 'Word2Vec All',
- tensorShape: [71291, 200],
- tensorPath: 'word2vec_full_200d_tensors.tsv',
- metadataPath: 'word2vec_full_200d_labels.tsv'
- },
- {
- tensorName: 'SmartReply 5K',
- tensorShape: [5000, 256],
- tensorPath: 'smartreply_5000_256d_tensors.tsv',
- metadataPath: 'smartreply_5000_256d_labels.tsv'
- },
- {
- tensorName: 'SmartReply All',
- tensorShape: [35860, 256],
- tensorPath: 'smartreply_full_256d_tensors.tsv',
- metadataPath: 'smartreply_full_256d_labels.tsv'
- },
- {
- tensorName: 'Mnist with images 10K',
- tensorShape: [10000, 784],
- tensorPath: 'mnist_10k_784d_tensors.tsv',
- metadataPath: 'mnist_10k_784d_labels.tsv',
- sprite: {
- imagePath: 'mnist_10k_sprite.png',
- singleImageDim: [28, 28]
- }
- },
- {
- tensorName: 'Iris',
- tensorShape: [150, 4],
- tensorPath: 'iris_tensors.tsv',
- metadataPath: 'iris_labels.tsv'
- },
- {
- tensorName: 'Unit Cube',
- tensorShape: [8, 3],
- tensorPath: 'cube_tensors.tsv',
- metadataPath: 'cube_metadata.tsv'
- }
- ],
- modelCheckpointPath: 'Demo datasets'
- };
- /** Name of the folder where the demo datasets are stored. */
- private DEMO_FOLDER = 'data';
+ private projectorConfigPath: string;
+ private projectorConfig: ProjectorConfig;
+
+ constructor(projectorConfigPath: string) {
+ this.projectorConfigPath = projectorConfigPath;
+ }
private getEmbeddingInfo(tensorName: string): EmbeddingInfo {
- let embeddings = this.DEMO_CONFIG.embeddings;
+ let embeddings = this.projectorConfig.embeddings;
for (let i = 0; i < embeddings.length; i++) {
let embedding = embeddings[i];
if (embedding.tensorName === tensorName) {
@@ -98,18 +44,28 @@ export class DemoDataProvider implements DataProvider {
retrieveProjectorConfig(run: string, callback: (d: ProjectorConfig) => void)
: void {
- callback(this.DEMO_CONFIG);
+ let msgId = logging.setModalMessage('Fetching projector config...');
+ d3.json(this.projectorConfigPath, (err, projectorConfig) => {
+ if (err) {
+ logging.setModalMessage('Error: ' + err.responseText);
+ return;
+ }
+ logging.setModalMessage(null, msgId);
+ this.projectorConfig = projectorConfig;
+ callback(projectorConfig);
+ });
}
getDefaultTensor(run: string, callback: (tensorName: string) => void) {
- callback('SmartReply 5K');
+ // Return the first tensor as the default tensor.
+ callback(this.projectorConfig.embeddings[0].tensorName);
}
retrieveTensor(run: string, tensorName: string,
callback: (ds: DataSet) => void) {
let embedding = this.getEmbeddingInfo(tensorName);
let separator = embedding.tensorPath.substr(-3) === 'tsv' ? '\t' : ' ';
- let url = `${this.DEMO_FOLDER}/${embedding.tensorPath}`;
+ let url = `${embedding.tensorPath}`;
logging.setModalMessage('Fetching tensors...', TENSORS_MSG_ID);
d3.text(url, (error: any, dataString: string) => {
if (error) {
@@ -125,16 +81,12 @@ export class DemoDataProvider implements DataProvider {
retrieveSpriteAndMetadata(run: string, tensorName: string,
callback: (r: SpriteAndMetadataInfo) => void) {
let embedding = this.getEmbeddingInfo(tensorName);
- let metadataPath = null;
- if (embedding.metadataPath) {
- metadataPath = `${this.DEMO_FOLDER}/${embedding.metadataPath}`;
- }
let spriteImagePath = null;
if (embedding.sprite && embedding.sprite.imagePath) {
- spriteImagePath = `${this.DEMO_FOLDER}/${embedding.sprite.imagePath}`;
+ spriteImagePath = embedding.sprite.imagePath;
}
- dataProvider.retrieveSpriteAndMetadataInfo(metadataPath, spriteImagePath,
- embedding.sprite, callback);
+ dataProvider.retrieveSpriteAndMetadataInfo(
+ embedding.metadataPath, spriteImagePath, embedding.sprite, callback);
}
getBookmarks(
diff --git a/tensorflow/tensorboard/components/vz_projector/vz-projector-app.html b/tensorflow/tensorboard/components/vz_projector/vz-projector-app.html
index f2a9fcad137..6221485c2d1 100644
--- a/tensorflow/tensorboard/components/vz_projector/vz-projector-app.html
+++ b/tensorflow/tensorboard/components/vz_projector/vz-projector-app.html
@@ -76,7 +76,9 @@ vz-projector {
-
+