Anylearn自定义算法训练跟踪 ========================== 在 :ref:`api_applications_quickstart` 中曾经介绍过, Anylearn后端引擎不仅支持Anylearn算法库内置的标准算法, 也可以通过宽松的执行环境支持用户自定义的自定义算法。 然而,未经过标准化封装的算法的训练过程不尽相同, 可能有各式各样的迭代方式、进度、中间结果等等, 很难做到通用的训练跟踪。 因此,Anylearn SDK提供了一套简洁的接口, 用户只需要在自定义的算法中增加微量的代码, 调用这些接口, 便能做到在Anylearn中对训练过程进行有效跟踪。 自定义算法Hello world ^^^^^^^^^^^^^^^^^^^^^ 我们以一个简单的Hello world级的算法为例, 阐述如何使用Anylearn SDK的训练跟踪功能。 以下是训练 `Fashion MNIST数据集 `_ 的一个CNN的主体代码: .. code-block:: python # 主体逻辑,忽略部分细节 class EpochEndCallback(tf.keras.callbacks.Callback): def on_epoch_end(self, epoch, logs=None): acc = logs['val_acc'] if 'val_acc' in logs else logs['val_accuracy'] print(f"Current acc: {acc}") parser = argparse.ArgumentParser() (X_train, y_train), (X_test, y_test) = load_data_local(path=args.data_path) # ...... # Build model model = tf.keras.Sequential([ tf.keras.layers.Conv2D(32, [3, 3], activation='relu'), tf.keras.layers.MaxPooling2D(pool_size=(2, 2)), # ...... ]) opt = tf.keras.optimizers.Adam(_learning_rate) model.compile(optimizer=opt, loss=tf.keras.losses.SparseCategoricalCrossentropy(), metrics=['accuracy']) # ...... # Train model.fit(dset_train, callbacks=callbacks, epochs=_epochs) # Test test_loss, test_acc = model.evaluate(dset_test, verbose=2) # Save model.save(_model_dir) 集成Anylearn SDK使得Anylearn可以对训练进行跟踪 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 只需简单地修改上述CNN的代码, 导入Anylearn SDK、调用中间结果汇报接口、调用最终结果汇报接口, 即可让Anylearn对训练过程进行跟踪: .. code-block:: diff + import anylearn class EpochEndCallback(tf.keras.callbacks.Callback): def on_epoch_end(self, epoch, logs=None): acc = logs['val_acc'] if 'val_acc' in logs else logs['val_accuracy'] - print(f"Current acc: {acc}") + anylearn.report_intermediate_metric(acc) parser = argparse.ArgumentParser() (X_train, y_train), (X_test, y_test) = load_data_local(path=args.data_path) # ...... # Build model model = tf.keras.Sequential([ tf.keras.layers.Conv2D(32, [3, 3], activation='relu'), tf.keras.layers.MaxPooling2D(pool_size=(2, 2)), # ...... ]) opt = tf.keras.optimizers.Adam(_learning_rate) model.compile(optimizer=opt, loss=tf.keras.losses.SparseCategoricalCrossentropy(), metrics=['accuracy']) # ...... # Train model.fit(dset_train, callbacks=callbacks, epochs=_epochs) # Test test_loss, test_acc = model.evaluate(dset_test, verbose=2) + anylearn.report_final_metric(test_acc) # Save model.save(_model_dir) 接口参考 ^^^^^^^^ .. autofunction:: anylearn.report_intermediate_metric .. autofunction:: anylearn.report_final_metric .. autofunction:: anylearn.applications.tracking.get_incontainer_train_task