forked from 626_privacy/tensorflow_privacy
Changes for API docstrings for TF.org:
(1) Hide documentation for superclass methods in DPModel. (2) Make compute_dp_sgd_privacy visible. PiperOrigin-RevId: 377553548
This commit is contained in:
parent
385fefc85e
commit
eaf9fbf969
3 changed files with 41 additions and 1 deletions
|
@ -19,6 +19,9 @@ import os
|
|||
from absl import app
|
||||
from absl import flags
|
||||
|
||||
import tensorflow as tf
|
||||
|
||||
from tensorflow_docs.api_generator import doc_controls
|
||||
from tensorflow_docs.api_generator import generate_lib
|
||||
from tensorflow_docs.api_generator import public_api
|
||||
|
||||
|
@ -44,10 +47,35 @@ PROJECT_SHORT_NAME = 'tf_privacy'
|
|||
PROJECT_FULL_NAME = 'TensorFlow Privacy'
|
||||
|
||||
|
||||
def _hide_layer_and_module_methods():
|
||||
"""Hide methods and properties defined in the base classes of keras layers."""
|
||||
# __dict__ only sees attributes defined in *this* class, not on parent classes
|
||||
# Needed to ignore redudant subclass documentation
|
||||
model_contents = list(tf.keras.Model.__dict__.items())
|
||||
layer_contents = list(tf.keras.layers.Layer.__dict__.items())
|
||||
module_contents = list(tf.Module.__dict__.items())
|
||||
|
||||
for name, obj in model_contents + layer_contents + module_contents:
|
||||
if name == '__init__':
|
||||
continue
|
||||
|
||||
if isinstance(obj, property):
|
||||
obj = obj.fget
|
||||
|
||||
if isinstance(obj, (staticmethod, classmethod)):
|
||||
obj = obj.__func__
|
||||
|
||||
try:
|
||||
doc_controls.do_not_doc_in_subclasses(obj)
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
|
||||
def gen_api_docs():
|
||||
"""Generates api docs for the tensorflow docs package."""
|
||||
output_dir = FLAGS.output_dir
|
||||
|
||||
_hide_layer_and_module_methods()
|
||||
doc_generator = generate_lib.DocGenerator(
|
||||
root_title=PROJECT_FULL_NAME,
|
||||
py_modules=[(PROJECT_SHORT_NAME, tf_privacy)],
|
||||
|
|
|
@ -27,6 +27,7 @@ if hasattr(sys, 'skip_tf_privacy_import'): # Useful for standalone scripts.
|
|||
pass
|
||||
else:
|
||||
# Analysis
|
||||
from tensorflow_privacy.privacy.analysis.compute_dp_sgd_privacy_lib import compute_dp_sgd_privacy
|
||||
from tensorflow_privacy.privacy.analysis.privacy_ledger import GaussianSumQueryEntry
|
||||
from tensorflow_privacy.privacy.analysis.privacy_ledger import PrivacyLedger
|
||||
from tensorflow_privacy.privacy.analysis.privacy_ledger import QueryWithLedger
|
||||
|
|
|
@ -55,7 +55,18 @@ def apply_dp_sgd_analysis(q, sigma, steps, orders, delta):
|
|||
|
||||
|
||||
def compute_dp_sgd_privacy(n, batch_size, noise_multiplier, epochs, delta):
|
||||
"""Compute epsilon based on the given hyperparameters."""
|
||||
"""Compute epsilon based on the given hyperparameters.
|
||||
|
||||
Args:
|
||||
n: Number of examples in the training data.
|
||||
batch_size: Batch size used in training.
|
||||
noise_multiplier: Noise multiplier used in training.
|
||||
epochs: Number of epochs in training.
|
||||
delta: Value of delta for which to compute epsilon.
|
||||
|
||||
Returns:
|
||||
Value of epsilon corresponding to input hyperparameters.
|
||||
"""
|
||||
q = batch_size / n # q - the sampling ratio.
|
||||
if q > 1:
|
||||
raise app.UsageError('n must be larger than the batch size.')
|
||||
|
|
Loading…
Reference in a new issue