[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6KQ4WZJM89HWTHZD3BAZF92":3,"skill-same:01M6KQ4WZJM89HWTHZD3BAZF92":92},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":42,"linkOnly":43,"markdownContent":44,"markdownBody":45,"frontMatter":46,"refName":58,"commitSha":59,"skillDirectory":60,"forksCount":13,"repositoryHtmlUrl":61,"repositoryHomepageUrl":6,"ownerHtmlUrl":62,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":63,"install":64,"resources":77},"01M6KQ4WZJM89HWTHZD3BAZF92","tensorboard",null,"Visualize training metrics, debug models with histograms, compare experiments, visualize model graphs, and profile performance with TensorBoard - Google's ML visualization toolkit","endman100\u002Fskill-router-nexus","endman100","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F31997019?v=4","01M6KPDX17BYDWW4RRB0TNGGMX","01M6KPDX64Y2QBEWVFG5W5PWPF",0,"MIT","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FAI-MLOps\u002Ftensorboard\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000013","分析与可视化","SCENARIO","使用场景",[5,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],"visualization","orchestra","Model Debugging","Training Metrics","Experiment Tracking","experiment","model","performance profiling","metrics","google","debugging","training","ml","pytorch","debug","experiments","tensorflow","performance","visualize","2026-11-10 10:12:30",false,"---\nname: tensorboard\ndescription: Visualize training metrics, debug models with histograms, compare experiments, visualize model graphs, and profile performance with TensorBoard - Google's ML visualization toolkit\nversion: 1.0.0\nauthor: Orchestra Research\nlicense: MIT\ntags: [MLOps, TensorBoard, Visualization, Training Metrics, Model Debugging, PyTorch, TensorFlow, Experiment Tracking, Performance Profiling]\ndependencies: [tensorboard, torch, tensorflow]\n---\n\n# TensorBoard: Visualization Toolkit for ML\n\n## When to Use This Skill\n\nUse TensorBoard when you need to:\n- **Visualize training metrics** like loss and accuracy over time\n- **Debug models** with histograms and distributions\n- **Compare experiments** across multiple runs\n- **Visualize model graphs** and architecture\n- **Project embeddings** to lower dimensions (t-SNE, PCA)\n- **Track hyperparameter** experiments\n- **Profile performance** and identify bottlenecks\n- **Visualize images and text** during training\n\n**Users**: 20M+ downloads\u002Fyear | **GitHub Stars**: 27k+ | **License**: Apache 2.0\n\n## Installation\n\n```bash\n# Install TensorBoard\npip install tensorboard\n\n# PyTorch integration\npip install torch torchvision tensorboard\n\n# TensorFlow integration (TensorBoard included)\npip install tensorflow\n\n# Launch TensorBoard\ntensorboard --logdir=runs\n# Access at http:\u002F\u002Flocalhost:6006\n```\n\n## Quick Start\n\n### PyTorch\n\n```python\nfrom torch.utils.tensorboard import SummaryWriter\n\n# Create writer\nwriter = SummaryWriter('runs\u002Fexperiment_1')\n\n# Training loop\nfor epoch in range(10):\n    train_loss = train_epoch()\n    val_acc = validate()\n\n    # Log metrics\n    writer.add_scalar('Loss\u002Ftrain', train_loss, epoch)\n    writer.add_scalar('Accuracy\u002Fval', val_acc, epoch)\n\n# Close writer\nwriter.close()\n\n# Launch: tensorboard --logdir=runs\n```\n\n### TensorFlow\u002FKeras\n\n```python\nimport tensorflow as tf\n\n# Create callback\ntensorboard_callback = tf.keras.callbacks.TensorBoard(\n    log_dir='logs\u002Ffit',\n    histogram_freq=1\n)\n\n# Train model\nmodel.fit(\n    x_train, y_train,\n    epochs=10,\n    validation_data=(x_val, y_val),\n    callbacks=[tensorboard_callback]\n)\n\n# Launch: tensorboard --logdir=logs\n```\n\n## Core Concepts\n\n### 1. SummaryWriter (PyTorch)\n\n```python\nfrom torch.utils.tensorboard import SummaryWriter\n\n# Default directory: runs\u002FCURRENT_DATETIME\nwriter = SummaryWriter()\n\n# Custom directory\nwriter = SummaryWriter('runs\u002Fexperiment_1')\n\n# Custom comment (appended to default directory)\nwriter = SummaryWriter(comment='baseline')\n\n# Log data\nwriter.add_scalar('Loss\u002Ftrain', 0.5, step=0)\nwriter.add_scalar('Loss\u002Ftrain', 0.3, step=1)\n\n# Flush and close\nwriter.flush()\nwriter.close()\n```\n\n### 2. Logging Scalars\n\n```python\n# PyTorch\nfrom torch.utils.tensorboard import SummaryWriter\nwriter = SummaryWriter()\n\nfor epoch in range(100):\n    train_loss = train()\n    val_loss = validate()\n\n    # Log individual metrics\n    writer.add_scalar('Loss\u002Ftrain', train_loss, epoch)\n    writer.add_scalar('Loss\u002Fval', val_loss, epoch)\n    writer.add_scalar('Accuracy\u002Ftrain', train_acc, epoch)\n    writer.add_scalar('Accuracy\u002Fval', val_acc, epoch)\n\n    # Learning rate\n    lr = optimizer.param_groups[0]['lr']\n    writer.add_scalar('Learning_rate', lr, epoch)\n\nwriter.close()\n```\n\n```python\n# TensorFlow\nimport tensorflow as tf\n\ntrain_summary_writer = tf.summary.create_file_writer('logs\u002Ftrain')\nval_summary_writer = tf.summary.create_file_writer('logs\u002Fval')\n\nfor epoch in range(100):\n    with train_summary_writer.as_default():\n        tf.summary.scalar('loss', train_loss, step=epoch)\n        tf.summary.scalar('accuracy', train_acc, step=epoch)\n\n    with val_summary_writer.as_default():\n        tf.summary.scalar('loss', val_loss, step=epoch)\n        tf.summary.scalar('accuracy', val_acc, step=epoch)\n```\n\n### 3. Logging Multiple Scalars\n\n```python\n# PyTorch: Group related metrics\nwriter.add_scalars('Loss', {\n    'train': train_loss,\n    'validation': val_loss,\n    'test': test_loss\n}, epoch)\n\nwriter.add_scalars('Metrics', {\n    'accuracy': accuracy,\n    'precision': precision,\n    'recall': recall,\n    'f1': f1_score\n}, epoch)\n```\n\n### 4. Logging Images\n\n```python\n# PyTorch\nimport torch\nfrom torchvision.utils import make_grid\n\n# Single image\nwriter.add_image('Input\u002Fsample', img_tensor, epoch)\n\n# Multiple images as grid\nimg_grid = make_grid(images[:64], nrow=8)\nwriter.add_image('Batch\u002Finputs', img_grid, epoch)\n\n# Predictions visualization\npred_grid = make_grid(predictions[:16], nrow=4)\nwriter.add_image('Predictions', pred_grid, epoch)\n```\n\n```python\n# TensorFlow\nimport tensorflow as tf\n\nwith file_writer.as_default():\n    # Encode images as PNG\n    tf.summary.image('Training samples', images, step=epoch, max_outputs=25)\n```\n\n### 5. Logging Histograms\n\n```python\n# PyTorch: Track weight distributions\nfor name, param in model.named_parameters():\n    writer.add_histogram(name, param, epoch)\n\n    # Track gradients\n    if param.grad is not None:\n        writer.add_histogram(f'{name}.grad', param.grad, epoch)\n\n# Track activations\nwriter.add_histogram('Activations\u002Frelu1', activations, epoch)\n```\n\n```python\n# TensorFlow\nwith file_writer.as_default():\n    tf.summary.histogram('weights\u002Flayer1', layer1.kernel, step=epoch)\n    tf.summary.histogram('activations\u002Frelu1', activations, step=epoch)\n```\n\n### 6. Logging Model Graph\n\n```python\n# PyTorch\nimport torch\n\nmodel = MyModel()\ndummy_input = torch.randn(1, 3, 224, 224)\n\nwriter.add_graph(model, dummy_input)\nwriter.close()\n```\n\n```python\n# TensorFlow (automatic with Keras)\ntensorboard_callback = tf.keras.callbacks.TensorBoard(\n    log_dir='logs',\n    write_graph=True\n)\n\nmodel.fit(x, y, callbacks=[tensorboard_callback])\n```\n\n## Advanced Features\n\n### Embedding Projector\n\nVisualize high-dimensional data (embeddings, features) in 2D\u002F3D.\n\n```python\nimport torch\nfrom torch.utils.tensorboard import SummaryWriter\n\n# Get embeddings (e.g., word embeddings, image features)\nembeddings = model.get_embeddings(data)  # Shape: (N, embedding_dim)\n\n# Metadata (labels for each point)\nmetadata = ['class_1', 'class_2', 'class_1', ...]\n\n# Images (optional, for image embeddings)\nlabel_images = torch.stack([img1, img2, img3, ...])\n\n# Log to TensorBoard\nwriter.add_embedding(\n    embeddings,\n    metadata=metadata,\n    label_img=label_images,\n    global_step=epoch\n)\n```\n\n**In TensorBoard:**\n- Navigate to \"Projector\" tab\n- Choose PCA, t-SNE, or UMAP visualization\n- Search, filter, and explore clusters\n\n### Hyperparameter Tuning\n\n```python\nfrom torch.utils.tensorboard import SummaryWriter\n\n# Try different hyperparameters\nfor lr in [0.001, 0.01, 0.1]:\n    for batch_size in [16, 32, 64]:\n        # Create unique run directory\n        writer = SummaryWriter(f'runs\u002Flr{lr}_bs{batch_size}')\n\n        # Log hyperparameters\n        writer.add_hparams(\n            {'lr': lr, 'batch_size': batch_size},\n            {'hparam\u002Faccuracy': final_acc, 'hparam\u002Floss': final_loss}\n        )\n\n        # Train and log\n        for epoch in range(10):\n            loss = train(lr, batch_size)\n            writer.add_scalar('Loss\u002Ftrain', loss, epoch)\n\n        writer.close()\n\n# Compare in TensorBoard's \"HParams\" tab\n```\n\n### Text Logging\n\n```python\n# PyTorch: Log text (e.g., model predictions, summaries)\nwriter.add_text('Predictions', f'Epoch {epoch}: {predictions}', epoch)\nwriter.add_text('Config', str(config), 0)\n\n# Log markdown tables\nmarkdown_table = \"\"\"\n| Metric | Value |\n|--------|-------|\n| Accuracy | 0.95 |\n| F1 Score | 0.93 |\n\"\"\"\nwriter.add_text('Results', markdown_table, epoch)\n```\n\n### PR Curves\n\nPrecision-Recall curves for classification.\n\n```python\nfrom torch.utils.tensorboard import SummaryWriter\n\n# Get predictions and labels\npredictions = model(test_data)  # Shape: (N, num_classes)\nlabels = test_labels  # Shape: (N,)\n\n# Log PR curve for each class\nfor i in range(num_classes):\n    writer.add_pr_curve(\n        f'PR_curve\u002Fclass_{i}',\n        labels == i,\n        predictions[:, i],\n        global_step=epoch\n    )\n```\n\n## Integration Examples\n\n### PyTorch Training Loop\n\n```python\nimport torch\nimport torch.nn as nn\nfrom torch.utils.tensorboard import SummaryWriter\n\n# Setup\nwriter = SummaryWriter('runs\u002Fresnet_experiment')\nmodel = ResNet50()\noptimizer = torch.optim.Adam(model.parameters(), lr=0.001)\ncriterion = nn.CrossEntropyLoss()\n\n# Log model graph\ndummy_input = torch.randn(1, 3, 224, 224)\nwriter.add_graph(model, dummy_input)\n\n# Training loop\nfor epoch in range(50):\n    model.train()\n    train_loss = 0.0\n    train_correct = 0\n\n    for batch_idx, (data, target) in enumerate(train_loader):\n        optimizer.zero_grad()\n        output = model(data)\n        loss = criterion(output, target)\n        loss.backward()\n        optimizer.step()\n\n        train_loss += loss.item()\n        pred = output.argmax(dim=1)\n        train_correct += pred.eq(target).sum().item()\n\n        # Log batch metrics (every 100 batches)\n        if batch_idx % 100 == 0:\n            global_step = epoch * len(train_loader) + batch_idx\n            writer.add_scalar('Loss\u002Ftrain_batch', loss.item(), global_step)\n\n    # Epoch metrics\n    train_loss \u002F= len(train_loader)\n    train_acc = train_correct \u002F len(train_loader.dataset)\n\n    # Validation\n    model.eval()\n    val_loss = 0.0\n    val_correct = 0\n\n    with torch.no_grad():\n        for data, target in val_loader:\n            output = model(data)\n            val_loss += criterion(output, target).item()\n            pred = output.argmax(dim=1)\n            val_correct += pred.eq(target).sum().item()\n\n    val_loss \u002F= len(val_loader)\n    val_acc = val_correct \u002F len(val_loader.dataset)\n\n    # Log epoch metrics\n    writer.add_scalars('Loss', {'train': train_loss, 'val': val_loss}, epoch)\n    writer.add_scalars('Accuracy', {'train': train_acc, 'val': val_acc}, epoch)\n\n    # Log learning rate\n    writer.add_scalar('Learning_rate', optimizer.param_groups[0]['lr'], epoch)\n\n    # Log histograms (every 5 epochs)\n    if epoch % 5 == 0:\n        for name, param in model.named_parameters():\n            writer.add_histogram(name, param, epoch)\n\n    # Log sample predictions\n    if epoch % 10 == 0:\n        sample_images = data[:8]\n        writer.add_image('Sample_inputs', make_grid(sample_images), epoch)\n\nwriter.close()\n```\n\n### TensorFlow\u002FKeras Training\n\n```python\nimport tensorflow as tf\n\n# Define model\nmodel = tf.keras.models.Sequential([\n    tf.keras.layers.Conv2D(32, 3, activation='relu', input_shape=(28, 28, 1)),\n    tf.keras.layers.MaxPooling2D(),\n    tf.keras.layers.Flatten(),\n    tf.keras.layers.Dense(128, activation='relu'),\n    tf.keras.layers.Dense(10, activation='softmax')\n])\n\nmodel.compile(\n    optimizer='adam',\n    loss='sparse_categorical_crossentropy',\n    metrics=['accuracy']\n)\n\n# TensorBoard callback\ntensorboard_callback = tf.keras.callbacks.TensorBoard(\n    log_dir='logs\u002Ffit',\n    histogram_freq=1,          # Log histograms every epoch\n    write_graph=True,          # Visualize model graph\n    write_images=True,         # Visualize weights as images\n    update_freq='epoch',       # Log metrics every epoch\n    profile_batch='500,520',   # Profile batches 500-520\n    embeddings_freq=1          # Log embeddings every epoch\n)\n\n# Train\nmodel.fit(\n    x_train, y_train,\n    epochs=10,\n    validation_data=(x_val, y_val),\n    callbacks=[tensorboard_callback]\n)\n```\n\n## Comparing Experiments\n\n### Multiple Runs\n\n```bash\n# Run experiments with different configs\npython train.py --lr 0.001 --logdir runs\u002Fexp1\npython train.py --lr 0.01 --logdir runs\u002Fexp2\npython train.py --lr 0.1 --logdir runs\u002Fexp3\n\n# View all runs together\ntensorboard --logdir=runs\n```\n\n**In TensorBoard:**\n- All runs appear in the same dashboard\n- Toggle runs on\u002Foff for comparison\n- Use regex to filter run names\n- Overlay charts to compare metrics\n\n### Organizing Experiments\n\n```python\n# Hierarchical organization\nruns\u002F\n├── baseline\u002F\n│   ├── run_1\u002F\n│   └── run_2\u002F\n├── improved\u002F\n│   ├── run_1\u002F\n│   └── run_2\u002F\n└── final\u002F\n    └── run_1\u002F\n\n# Log with hierarchy\nwriter = SummaryWriter('runs\u002Fbaseline\u002Frun_1')\n```\n\n## Best Practices\n\n### 1. Use Descriptive Run Names\n\n```python\n# ✅ Good: Descriptive names\nfrom datetime import datetime\ntimestamp = datetime.now().strftime('%Y%m%d_%H%M%S')\nwriter = SummaryWriter(f'runs\u002Fresnet50_lr0.001_bs32_{timestamp}')\n\n# ❌ Bad: Auto-generated names\nwriter = SummaryWriter()  # Creates runs\u002FJan01_12-34-56_hostname\n```\n\n### 2. Group Related Metrics\n\n```python\n# ✅ Good: Grouped metrics\nwriter.add_scalar('Loss\u002Ftrain', train_loss, step)\nwriter.add_scalar('Loss\u002Fval', val_loss, step)\nwriter.add_scalar('Accuracy\u002Ftrain', train_acc, step)\nwriter.add_scalar('Accuracy\u002Fval', val_acc, step)\n\n# ❌ Bad: Flat namespace\nwriter.add_scalar('train_loss', train_loss, step)\nwriter.add_scalar('val_loss', val_loss, step)\n```\n\n### 3. Log Regularly but Not Too Often\n\n```python\n# ✅ Good: Log epoch metrics always, batch metrics occasionally\nfor epoch in range(100):\n    for batch_idx, (data, target) in enumerate(train_loader):\n        loss = train_step(data, target)\n\n        # Log every 100 batches\n        if batch_idx % 100 == 0:\n            writer.add_scalar('Loss\u002Fbatch', loss, global_step)\n\n    # Always log epoch metrics\n    writer.add_scalar('Loss\u002Fepoch', epoch_loss, epoch)\n\n# ❌ Bad: Log every batch (creates huge log files)\nfor batch in train_loader:\n    writer.add_scalar('Loss', loss, step)  # Too frequent\n```\n\n### 4. Close Writer When Done\n\n```python\n# ✅ Good: Use context manager\nwith SummaryWriter('runs\u002Fexp1') as writer:\n    for epoch in range(10):\n        writer.add_scalar('Loss', loss, epoch)\n# Automatically closes\n\n# Or manually\nwriter = SummaryWriter('runs\u002Fexp1')\n# ... logging ...\nwriter.close()\n```\n\n### 5. Use Separate Writers for Train\u002FVal\n\n```python\n# ✅ Good: Separate log directories\ntrain_writer = SummaryWriter('runs\u002Fexp1\u002Ftrain')\nval_writer = SummaryWriter('runs\u002Fexp1\u002Fval')\n\ntrain_writer.add_scalar('loss', train_loss, epoch)\nval_writer.add_scalar('loss', val_loss, epoch)\n```\n\n## Performance Profiling\n\n### TensorFlow Profiler\n\n```python\n# Enable profiling\ntensorboard_callback = tf.keras.callbacks.TensorBoard(\n    log_dir='logs',\n    profile_batch='10,20'  # Profile batches 10-20\n)\n\nmodel.fit(x, y, callbacks=[tensorboard_callback])\n\n# View in TensorBoard Profile tab\n# Shows: GPU utilization, kernel stats, memory usage, bottlenecks\n```\n\n### PyTorch Profiler\n\n```python\nimport torch.profiler as profiler\n\nwith profiler.profile(\n    activities=[\n        profiler.ProfilerActivity.CPU,\n        profiler.ProfilerActivity.CUDA\n    ],\n    on_trace_ready=torch.profiler.tensorboard_trace_handler('.\u002Fruns\u002Fprofiler'),\n    record_shapes=True,\n    with_stack=True\n) as prof:\n    for batch in train_loader:\n        loss = train_step(batch)\n        prof.step()\n\n# View in TensorBoard Profile tab\n```\n\n## Resources\n\n- **Documentation**: https:\u002F\u002Fwww.tensorflow.org\u002Ftensorboard\n- **PyTorch Integration**: https:\u002F\u002Fpytorch.org\u002Fdocs\u002Fstable\u002Ftensorboard.html\n- **GitHub**: https:\u002F\u002Fgithub.com\u002Ftensorflow\u002Ftensorboard (27k+ stars)\n- **TensorBoard.dev**: https:\u002F\u002Ftensorboard.dev (share experiments publicly)\n\n## See Also\n\n- `references\u002Fvisualization.md` - Comprehensive visualization guide\n- `references\u002Fprofiling.md` - Performance profiling patterns\n- `references\u002Fintegrations.md` - Framework-specific integration examples\n\n\n","# TensorBoard: Visualization Toolkit for ML\n\n## When to Use This Skill\n\nUse TensorBoard when you need to:\n- **Visualize training metrics** like loss and accuracy over time\n- **Debug models** with histograms and distributions\n- **Compare experiments** across multiple runs\n- **Visualize model graphs** and architecture\n- **Project embeddings** to lower dimensions (t-SNE, PCA)\n- **Track hyperparameter** experiments\n- **Profile performance** and identify bottlenecks\n- **Visualize images and text** during training\n\n**Users**: 20M+ downloads\u002Fyear | **GitHub Stars**: 27k+ | **License**: Apache 2.0\n\n## Installation\n\n```bash\n# Install TensorBoard\npip install tensorboard\n\n# PyTorch integration\npip install torch torchvision tensorboard\n\n# TensorFlow integration (TensorBoard included)\npip install tensorflow\n\n# Launch TensorBoard\ntensorboard --logdir=runs\n# Access at http:\u002F\u002Flocalhost:6006\n```\n\n## Quick Start\n\n### PyTorch\n\n```python\nfrom torch.utils.tensorboard import SummaryWriter\n\n# Create writer\nwriter = SummaryWriter('runs\u002Fexperiment_1')\n\n# Training loop\nfor epoch in range(10):\n    train_loss = train_epoch()\n    val_acc = validate()\n\n    # Log metrics\n    writer.add_scalar('Loss\u002Ftrain', train_loss, epoch)\n    writer.add_scalar('Accuracy\u002Fval', val_acc, epoch)\n\n# Close writer\nwriter.close()\n\n# Launch: tensorboard --logdir=runs\n```\n\n### TensorFlow\u002FKeras\n\n```python\nimport tensorflow as tf\n\n# Create callback\ntensorboard_callback = tf.keras.callbacks.TensorBoard(\n    log_dir='logs\u002Ffit',\n    histogram_freq=1\n)\n\n# Train model\nmodel.fit(\n    x_train, y_train,\n    epochs=10,\n    validation_data=(x_val, y_val),\n    callbacks=[tensorboard_callback]\n)\n\n# Launch: tensorboard --logdir=logs\n```\n\n## Core Concepts\n\n### 1. SummaryWriter (PyTorch)\n\n```python\nfrom torch.utils.tensorboard import SummaryWriter\n\n# Default directory: runs\u002FCURRENT_DATETIME\nwriter = SummaryWriter()\n\n# Custom directory\nwriter = SummaryWriter('runs\u002Fexperiment_1')\n\n# Custom comment (appended to default directory)\nwriter = SummaryWriter(comment='baseline')\n\n# Log data\nwriter.add_scalar('Loss\u002Ftrain', 0.5, step=0)\nwriter.add_scalar('Loss\u002Ftrain', 0.3, step=1)\n\n# Flush and close\nwriter.flush()\nwriter.close()\n```\n\n### 2. Logging Scalars\n\n```python\n# PyTorch\nfrom torch.utils.tensorboard import SummaryWriter\nwriter = SummaryWriter()\n\nfor epoch in range(100):\n    train_loss = train()\n    val_loss = validate()\n\n    # Log individual metrics\n    writer.add_scalar('Loss\u002Ftrain', train_loss, epoch)\n    writer.add_scalar('Loss\u002Fval', val_loss, epoch)\n    writer.add_scalar('Accuracy\u002Ftrain', train_acc, epoch)\n    writer.add_scalar('Accuracy\u002Fval', val_acc, epoch)\n\n    # Learning rate\n    lr = optimizer.param_groups[0]['lr']\n    writer.add_scalar('Learning_rate', lr, epoch)\n\nwriter.close()\n```\n\n```python\n# TensorFlow\nimport tensorflow as tf\n\ntrain_summary_writer = tf.summary.create_file_writer('logs\u002Ftrain')\nval_summary_writer = tf.summary.create_file_writer('logs\u002Fval')\n\nfor epoch in range(100):\n    with train_summary_writer.as_default():\n        tf.summary.scalar('loss', train_loss, step=epoch)\n        tf.summary.scalar('accuracy', train_acc, step=epoch)\n\n    with val_summary_writer.as_default():\n        tf.summary.scalar('loss', val_loss, step=epoch)\n        tf.summary.scalar('accuracy', val_acc, step=epoch)\n```\n\n### 3. Logging Multiple Scalars\n\n```python\n# PyTorch: Group related metrics\nwriter.add_scalars('Loss', {\n    'train': train_loss,\n    'validation': val_loss,\n    'test': test_loss\n}, epoch)\n\nwriter.add_scalars('Metrics', {\n    'accuracy': accuracy,\n    'precision': precision,\n    'recall': recall,\n    'f1': f1_score\n}, epoch)\n```\n\n### 4. Logging Images\n\n```python\n# PyTorch\nimport torch\nfrom torchvision.utils import make_grid\n\n# Single image\nwriter.add_image('Input\u002Fsample', img_tensor, epoch)\n\n# Multiple images as grid\nimg_grid = make_grid(images[:64], nrow=8)\nwriter.add_image('Batch\u002Finputs', img_grid, epoch)\n\n# Predictions visualization\npred_grid = make_grid(predictions[:16], nrow=4)\nwriter.add_image('Predictions', pred_grid, epoch)\n```\n\n```python\n# TensorFlow\nimport tensorflow as tf\n\nwith file_writer.as_default():\n    # Encode images as PNG\n    tf.summary.image('Training samples', images, step=epoch, max_outputs=25)\n```\n\n### 5. Logging Histograms\n\n```python\n# PyTorch: Track weight distributions\nfor name, param in model.named_parameters():\n    writer.add_histogram(name, param, epoch)\n\n    # Track gradients\n    if param.grad is not None:\n        writer.add_histogram(f'{name}.grad', param.grad, epoch)\n\n# Track activations\nwriter.add_histogram('Activations\u002Frelu1', activations, epoch)\n```\n\n```python\n# TensorFlow\nwith file_writer.as_default():\n    tf.summary.histogram('weights\u002Flayer1', layer1.kernel, step=epoch)\n    tf.summary.histogram('activations\u002Frelu1', activations, step=epoch)\n```\n\n### 6. Logging Model Graph\n\n```python\n# PyTorch\nimport torch\n\nmodel = MyModel()\ndummy_input = torch.randn(1, 3, 224, 224)\n\nwriter.add_graph(model, dummy_input)\nwriter.close()\n```\n\n```python\n# TensorFlow (automatic with Keras)\ntensorboard_callback = tf.keras.callbacks.TensorBoard(\n    log_dir='logs',\n    write_graph=True\n)\n\nmodel.fit(x, y, callbacks=[tensorboard_callback])\n```\n\n## Advanced Features\n\n### Embedding Projector\n\nVisualize high-dimensional data (embeddings, features) in 2D\u002F3D.\n\n```python\nimport torch\nfrom torch.utils.tensorboard import SummaryWriter\n\n# Get embeddings (e.g., word embeddings, image features)\nembeddings = model.get_embeddings(data)  # Shape: (N, embedding_dim)\n\n# Metadata (labels for each point)\nmetadata = ['class_1', 'class_2', 'class_1', ...]\n\n# Images (optional, for image embeddings)\nlabel_images = torch.stack([img1, img2, img3, ...])\n\n# Log to TensorBoard\nwriter.add_embedding(\n    embeddings,\n    metadata=metadata,\n    label_img=label_images,\n    global_step=epoch\n)\n```\n\n**In TensorBoard:**\n- Navigate to \"Projector\" tab\n- Choose PCA, t-SNE, or UMAP visualization\n- Search, filter, and explore clusters\n\n### Hyperparameter Tuning\n\n```python\nfrom torch.utils.tensorboard import SummaryWriter\n\n# Try different hyperparameters\nfor lr in [0.001, 0.01, 0.1]:\n    for batch_size in [16, 32, 64]:\n        # Create unique run directory\n        writer = SummaryWriter(f'runs\u002Flr{lr}_bs{batch_size}')\n\n        # Log hyperparameters\n        writer.add_hparams(\n            {'lr': lr, 'batch_size': batch_size},\n            {'hparam\u002Faccuracy': final_acc, 'hparam\u002Floss': final_loss}\n        )\n\n        # Train and log\n        for epoch in range(10):\n            loss = train(lr, batch_size)\n            writer.add_scalar('Loss\u002Ftrain', loss, epoch)\n\n        writer.close()\n\n# Compare in TensorBoard's \"HParams\" tab\n```\n\n### Text Logging\n\n```python\n# PyTorch: Log text (e.g., model predictions, summaries)\nwriter.add_text('Predictions', f'Epoch {epoch}: {predictions}', epoch)\nwriter.add_text('Config', str(config), 0)\n\n# Log markdown tables\nmarkdown_table = \"\"\"\n| Metric | Value |\n|--------|-------|\n| Accuracy | 0.95 |\n| F1 Score | 0.93 |\n\"\"\"\nwriter.add_text('Results', markdown_table, epoch)\n```\n\n### PR Curves\n\nPrecision-Recall curves for classification.\n\n```python\nfrom torch.utils.tensorboard import SummaryWriter\n\n# Get predictions and labels\npredictions = model(test_data)  # Shape: (N, num_classes)\nlabels = test_labels  # Shape: (N,)\n\n# Log PR curve for each class\nfor i in range(num_classes):\n    writer.add_pr_curve(\n        f'PR_curve\u002Fclass_{i}',\n        labels == i,\n        predictions[:, i],\n        global_step=epoch\n    )\n```\n\n## Integration Examples\n\n### PyTorch Training Loop\n\n```python\nimport torch\nimport torch.nn as nn\nfrom torch.utils.tensorboard import SummaryWriter\n\n# Setup\nwriter = SummaryWriter('runs\u002Fresnet_experiment')\nmodel = ResNet50()\noptimizer = torch.optim.Adam(model.parameters(), lr=0.001)\ncriterion = nn.CrossEntropyLoss()\n\n# Log model graph\ndummy_input = torch.randn(1, 3, 224, 224)\nwriter.add_graph(model, dummy_input)\n\n# Training loop\nfor epoch in range(50):\n    model.train()\n    train_loss = 0.0\n    train_correct = 0\n\n    for batch_idx, (data, target) in enumerate(train_loader):\n        optimizer.zero_grad()\n        output = model(data)\n        loss = criterion(output, target)\n        loss.backward()\n        optimizer.step()\n\n        train_loss += loss.item()\n        pred = output.argmax(dim=1)\n        train_correct += pred.eq(target).sum().item()\n\n        # Log batch metrics (every 100 batches)\n        if batch_idx % 100 == 0:\n            global_step = epoch * len(train_loader) + batch_idx\n            writer.add_scalar('Loss\u002Ftrain_batch', loss.item(), global_step)\n\n    # Epoch metrics\n    train_loss \u002F= len(train_loader)\n    train_acc = train_correct \u002F len(train_loader.dataset)\n\n    # Validation\n    model.eval()\n    val_loss = 0.0\n    val_correct = 0\n\n    with torch.no_grad():\n        for data, target in val_loader:\n            output = model(data)\n            val_loss += criterion(output, target).item()\n            pred = output.argmax(dim=1)\n            val_correct += pred.eq(target).sum().item()\n\n    val_loss \u002F= len(val_loader)\n    val_acc = val_correct \u002F len(val_loader.dataset)\n\n    # Log epoch metrics\n    writer.add_scalars('Loss', {'train': train_loss, 'val': val_loss}, epoch)\n    writer.add_scalars('Accuracy', {'train': train_acc, 'val': val_acc}, epoch)\n\n    # Log learning rate\n    writer.add_scalar('Learning_rate', optimizer.param_groups[0]['lr'], epoch)\n\n    # Log histograms (every 5 epochs)\n    if epoch % 5 == 0:\n        for name, param in model.named_parameters():\n            writer.add_histogram(name, param, epoch)\n\n    # Log sample predictions\n    if epoch % 10 == 0:\n        sample_images = data[:8]\n        writer.add_image('Sample_inputs', make_grid(sample_images), epoch)\n\nwriter.close()\n```\n\n### TensorFlow\u002FKeras Training\n\n```python\nimport tensorflow as tf\n\n# Define model\nmodel = tf.keras.models.Sequential([\n    tf.keras.layers.Conv2D(32, 3, activation='relu', input_shape=(28, 28, 1)),\n    tf.keras.layers.MaxPooling2D(),\n    tf.keras.layers.Flatten(),\n    tf.keras.layers.Dense(128, activation='relu'),\n    tf.keras.layers.Dense(10, activation='softmax')\n])\n\nmodel.compile(\n    optimizer='adam',\n    loss='sparse_categorical_crossentropy',\n    metrics=['accuracy']\n)\n\n# TensorBoard callback\ntensorboard_callback = tf.keras.callbacks.TensorBoard(\n    log_dir='logs\u002Ffit',\n    histogram_freq=1,          # Log histograms every epoch\n    write_graph=True,          # Visualize model graph\n    write_images=True,         # Visualize weights as images\n    update_freq='epoch',       # Log metrics every epoch\n    profile_batch='500,520',   # Profile batches 500-520\n    embeddings_freq=1          # Log embeddings every epoch\n)\n\n# Train\nmodel.fit(\n    x_train, y_train,\n    epochs=10,\n    validation_data=(x_val, y_val),\n    callbacks=[tensorboard_callback]\n)\n```\n\n## Comparing Experiments\n\n### Multiple Runs\n\n```bash\n# Run experiments with different configs\npython train.py --lr 0.001 --logdir runs\u002Fexp1\npython train.py --lr 0.01 --logdir runs\u002Fexp2\npython train.py --lr 0.1 --logdir runs\u002Fexp3\n\n# View all runs together\ntensorboard --logdir=runs\n```\n\n**In TensorBoard:**\n- All runs appear in the same dashboard\n- Toggle runs on\u002Foff for comparison\n- Use regex to filter run names\n- Overlay charts to compare metrics\n\n### Organizing Experiments\n\n```python\n# Hierarchical organization\nruns\u002F\n├── baseline\u002F\n│   ├── run_1\u002F\n│   └── run_2\u002F\n├── improved\u002F\n│   ├── run_1\u002F\n│   └── run_2\u002F\n└── final\u002F\n    └── run_1\u002F\n\n# Log with hierarchy\nwriter = SummaryWriter('runs\u002Fbaseline\u002Frun_1')\n```\n\n## Best Practices\n\n### 1. Use Descriptive Run Names\n\n```python\n# ✅ Good: Descriptive names\nfrom datetime import datetime\ntimestamp = datetime.now().strftime('%Y%m%d_%H%M%S')\nwriter = SummaryWriter(f'runs\u002Fresnet50_lr0.001_bs32_{timestamp}')\n\n# ❌ Bad: Auto-generated names\nwriter = SummaryWriter()  # Creates runs\u002FJan01_12-34-56_hostname\n```\n\n### 2. Group Related Metrics\n\n```python\n# ✅ Good: Grouped metrics\nwriter.add_scalar('Loss\u002Ftrain', train_loss, step)\nwriter.add_scalar('Loss\u002Fval', val_loss, step)\nwriter.add_scalar('Accuracy\u002Ftrain', train_acc, step)\nwriter.add_scalar('Accuracy\u002Fval', val_acc, step)\n\n# ❌ Bad: Flat namespace\nwriter.add_scalar('train_loss', train_loss, step)\nwriter.add_scalar('val_loss', val_loss, step)\n```\n\n### 3. Log Regularly but Not Too Often\n\n```python\n# ✅ Good: Log epoch metrics always, batch metrics occasionally\nfor epoch in range(100):\n    for batch_idx, (data, target) in enumerate(train_loader):\n        loss = train_step(data, target)\n\n        # Log every 100 batches\n        if batch_idx % 100 == 0:\n            writer.add_scalar('Loss\u002Fbatch', loss, global_step)\n\n    # Always log epoch metrics\n    writer.add_scalar('Loss\u002Fepoch', epoch_loss, epoch)\n\n# ❌ Bad: Log every batch (creates huge log files)\nfor batch in train_loader:\n    writer.add_scalar('Loss', loss, step)  # Too frequent\n```\n\n### 4. Close Writer When Done\n\n```python\n# ✅ Good: Use context manager\nwith SummaryWriter('runs\u002Fexp1') as writer:\n    for epoch in range(10):\n        writer.add_scalar('Loss', loss, epoch)\n# Automatically closes\n\n# Or manually\nwriter = SummaryWriter('runs\u002Fexp1')\n# ... logging ...\nwriter.close()\n```\n\n### 5. Use Separate Writers for Train\u002FVal\n\n```python\n# ✅ Good: Separate log directories\ntrain_writer = SummaryWriter('runs\u002Fexp1\u002Ftrain')\nval_writer = SummaryWriter('runs\u002Fexp1\u002Fval')\n\ntrain_writer.add_scalar('loss', train_loss, epoch)\nval_writer.add_scalar('loss', val_loss, epoch)\n```\n\n## Performance Profiling\n\n### TensorFlow Profiler\n\n```python\n# Enable profiling\ntensorboard_callback = tf.keras.callbacks.TensorBoard(\n    log_dir='logs',\n    profile_batch='10,20'  # Profile batches 10-20\n)\n\nmodel.fit(x, y, callbacks=[tensorboard_callback])\n\n# View in TensorBoard Profile tab\n# Shows: GPU utilization, kernel stats, memory usage, bottlenecks\n```\n\n### PyTorch Profiler\n\n```python\nimport torch.profiler as profiler\n\nwith profiler.profile(\n    activities=[\n        profiler.ProfilerActivity.CPU,\n        profiler.ProfilerActivity.CUDA\n    ],\n    on_trace_ready=torch.profiler.tensorboard_trace_handler('.\u002Fruns\u002Fprofiler'),\n    record_shapes=True,\n    with_stack=True\n) as prof:\n    for batch in train_loader:\n        loss = train_step(batch)\n        prof.step()\n\n# View in TensorBoard Profile tab\n```\n\n## Resources\n\n- **Documentation**: https:\u002F\u002Fwww.tensorflow.org\u002Ftensorboard\n- **PyTorch Integration**: https:\u002F\u002Fpytorch.org\u002Fdocs\u002Fstable\u002Ftensorboard.html\n- **GitHub**: https:\u002F\u002Fgithub.com\u002Ftensorflow\u002Ftensorboard (27k+ stars)\n- **TensorBoard.dev**: https:\u002F\u002Ftensorboard.dev (share experiments publicly)\n\n## See Also\n\n- `references\u002Fvisualization.md` - Comprehensive visualization guide\n- `references\u002Fprofiling.md` - Performance profiling patterns\n- `references\u002Fintegrations.md` - Framework-specific integration examples\n\n\n",{"name":5,"tags":47,"author":54,"license":14,"version":55,"description":7,"dependencies":56},[48,49,50,26,25,51,52,27,53],"MLOps","TensorBoard","Visualization","PyTorch","TensorFlow","Performance Profiling","Orchestra Research","1.0.0",[5,57,39],"torch","main","f19b254e8975d0bfddb394686706106930d7964d","AI-MLOps\u002Ftensorboard","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus","https:\u002F\u002Fgithub.com\u002Fendman100","2026-11-11 18:19:10",{"source":8,"skillName":5,"commands":65,"prompt":75,"zipAvailable":76},[66,69,72],{"tool":67,"command":68},"npx","npx skills add endman100\u002Fskill-router-nexus --skill tensorboard",{"tool":70,"command":71},"bunx","bunx skills add endman100\u002Fskill-router-nexus --skill tensorboard",{"tool":73,"command":74},"pnpm","pnpm dlx skills add endman100\u002Fskill-router-nexus --skill tensorboard","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FAI-MLOps\u002Ftensorboard\u002FSKILL.md",true,[78,84,88],{"path":79,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":82,"sourceHtmlUrl":83},"references\u002Fintegrations.md","REFERENCE","参考文档",16205,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FAI-MLOps\u002Ftensorboard\u002Freferences\u002Fintegrations.md",{"path":85,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":86,"sourceHtmlUrl":87},"references\u002Fprofiling.md",13337,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FAI-MLOps\u002Ftensorboard\u002Freferences\u002Fprofiling.md",{"path":89,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":90,"sourceHtmlUrl":91},"references\u002Fvisualization.md",14897,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FAI-MLOps\u002Ftensorboard\u002Freferences\u002Fvisualization.md",[93,117,153,176,185,209],{"skillNo":94,"name":95,"nameZh":6,"description":96,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":97,"sourceHtmlUrl":98,"categories":99,"keywords":105,"publishedAt":42},"01M6MPCT5BXVER8HQZTW3QE9AS","create-master","基于佛教经典文献，生成特定高僧大德的 AI 教学角色","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FMetaphysics-and-Spirituality\u002FMaster-skill\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FMetaphysics-and-Spirituality\u002FMaster-skill\u002FSKILL.md",[100],{"categoryNo":101,"categoryName":102,"taxonomyType":103,"taxonomyTypeDesc":104},"01JBSEEDCAT000000000000039","教师与教育","PROFESSION","适用职业",[106,107,108,109,110,111,112,113,114,115,116],"create master","master","create","生成","true","webfetch","edit","write","read","grep","Bash",{"skillNo":118,"name":119,"nameZh":6,"description":120,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":121,"sourceHtmlUrl":122,"categories":123,"keywords":133,"publishedAt":42},"01M6M43AKE95Y64E1JRXEF5QQ3","writing-dna-skill","从至少 20 篇完整文章中蒸馏可复用的写作 DNA，分析语言、文章结构、选题逻辑、素材策略、认知框架和视觉风格，并生成 Writing-DNA.md；按该 DNA 写作时会读取全部蒸馏产物和 5 篇相关原文。用于中英文作者、账号、品牌或出版物的风格分析与一致性写作。 Distill reusable Writing DNA from at least 20 complete articles for Chinese or English authors, publications, brands, and accounts; use for language, structure, topic logic, source strategy, cognitive-frame, and visual-style analysis.","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fwriting-dna-skill\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fwriting-dna-skill\u002FSKILL.md",[124,127,130],{"categoryNo":125,"categoryName":126,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":128,"categoryName":129,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":131,"categoryName":132,"taxonomyType":103,"taxonomyTypeDesc":104},"01JBSEEDCAT000000000000036","内容创作者",[134,135,136,137,138,139,140,141,142,143,144,145,146,109,147,148,149,150,151,152],"writing dna skill","DNA","writing","strategy","english","logic","visual","structure","chinese","reusable","use","style","distill","analysis","frame","source","for","at","complete",{"skillNo":154,"name":155,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":157,"sourceHtmlUrl":158,"categories":159,"keywords":162,"publishedAt":42},"01M6M428TTCGQ4ME3KY99VN037","stop-slop","Remove AI writing patterns from prose. Use when drafting, editing, or reviewing text to eliminate predictable AI tells.","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fstop-slop\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fstop-slop\u002FSKILL.md",[160,161],{"categoryNo":125,"categoryName":126,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":131,"categoryName":132,"taxonomyType":103,"taxonomyTypeDesc":104},[163,164,165,166,167,168,169,170,171,144,172,173,174,150,175,136],"slop","stop slop","stop","drafting","when","drafts","https","patterns","prose","remove","editing","text","content",{"skillNo":177,"name":178,"nameZh":6,"description":179,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":180,"sourceHtmlUrl":181,"categories":182,"keywords":183,"publishedAt":42},"01M6M41X0B7EBX42TK435DMGGR","shuorenhua","检查和清理中英文文本里的 AI 套路，适用于“去 AI 味”“说人话”“自然一点”“别像模板”“先标问题”这类改写和审稿需求；按场景控制力度，同时保留事实、术语、语域和责任主体。","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fshuorenhua\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fshuorenhua\u002FSKILL.md",[],[178,184],"文本",{"skillNo":186,"name":187,"nameZh":6,"description":188,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":189,"sourceHtmlUrl":190,"categories":191,"keywords":192,"publishedAt":42},"01M6M3ZD12WBEW5KXKDM4N6DFG","naming","Name products, SaaS, brands, open source projects, bots, and apps. Use when the user needs to name something, find a brand name, or pick a product name. Metaphor-driven process that produces memorable, meaningful names and avoids AI slop.","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fnaming-main\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fnaming-main\u002FSKILL.md",[],[187,193,194,195,196,197,144,198,114,149,199,200,201,202,116,203,204,205,206,167,207,208,163],"repo","websearch","product name","apps","bots","view","brand","pick","gh","projects","open","saas","open source","product","describe","ai slop",{"skillNo":210,"name":211,"nameZh":6,"description":212,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":213,"sourceHtmlUrl":214,"categories":215,"keywords":217,"publishedAt":42},"01M6M3YVXAFAAWJ7F6JMPFREYE","humanizer-zh","去除文本中的 AI 生成痕迹。适用于编辑或审阅文本，使其听起来更自然、更像人类书写。\n基于维基百科的\"AI 写作特征\"综合指南。检测并修复以下模式：夸大的象征意义、\n宣传性语言、以 -ing 结尾的肤浅分析、模糊的归因、破折号过度使用、三段式法则、\nAI 词汇、否定式排比、过多的连接性短语。","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fhumanizer-zh\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fhumanizer-zh\u002FSKILL.md",[216],{"categoryNo":125,"categoryName":126,"taxonomyType":20,"taxonomyTypeDesc":21},[218,219,220,114,113,112,136,109,184,221,163,165],"humanizer","zh","humanizer zh","翻译"]