确保目录构造存有。每一次创建文件,确保父目录早已存有。确保特定途径所有或一部分目录早已存有。建立沿特定途径上不会有目录。
下载函数公式,假如文件夹名称未指定,从URL分析。下载文档,返回当地系统文件文件夹名称。假如文档存有,不下载。假如文档未指定,从URL分析,返回filepath 。具体下载前,查验下载部位是不是有总体目标名字文档。是,绕过下载。下载文档,返回途径。反复下载,把文档从系统文件删掉。
import os
import shutil
import errno
from lxml import etree
from urllib.request import urlopen
def ensure_directory(directory):
directory = os.path.expanduser(directory)
try:
os. ** kedirs(directory)
except OSError as e:
if e.errno != errno.EEXIST:
raise e
def download(url, directory, filename=None):
if not filename:
_, filename = os.path.split(url)
directory = os.path.expanduser(directory)
ensure_directory(directory)
filepath = os.path.join(directory, filename)
if os.path.isfile(filepath):
return filepath
print('Download', filepath)
with urlopen(url) as response, open(filepath, 'wb') as file_:
shutil.copyfileobj(response, file_)
return filepath
硬盘缓存文件装饰器,较规模性数据解决正中间結果储存硬盘公共性部位,缓存文件载入函数公式装饰器。Python pickle作用完成函数公式返回值实例化、反序列化。只合适能列入主存数据。@disk_cache装饰器,函数公式实参发送给被装饰函数公式。函数参数明确主要参数组成是不是有缓存文件。散列投射为文件夹名称数据。如果是'method',绕过第一主要参数,缓存文件filepath,'directory/basename-hash.pickle'。方式 method=False主要参数通告装饰器是不是忽视第一个主要参数。
import functools
import os
import pickle
def disk_cache(basename, directory, method=False):
directory = os.path.expanduser(directory)
ensure_directory(directory)
def wrapper(func):
@functools.wraps(func)
def wrapped(*args, **kwargs):
key = (tuple(args), tuple(kwargs.items()))
if method and key:
key = key[1:]
filename = '{}-{}.pickle'.for ** t(basename, hash(key))
filepath = os.path.join(directory, filename)
if os.path.isfile(filepath):
with open(filepath, 'rb') as handle:
return pickle.load(handle)
result = func(*args, **kwargs)
with open(filepath, 'wb') as handle:
pickle.dump(result, handle)
return result
return wrapped
return wrapper
@disk_cache('dataset', '/home/user/dataset/')
def get_dataset(one_hot=True):
dataset = Dataset('http://example.com/dataset.bz2')
dataset = Tokenize(dataset)
if one_hot:
dataset = OneHotEncoding(dataset)
return dataset
特性词典。承继自内嵌dict类,可以用属性语法浏览悠已经有原素。传到规范词典(键值对)。内嵌函数公式locals,返回作用域全部静态变量名值投射。
class AttrDict(dict):
def __getattr__(self, key):
if key not in self:
raise AttributeError
return self[key]
def __setattr__(self, key, value):
if key not in self:
raise AttributeError
self[key] = value
可塑性特性装饰器。外界应用。浏览model.optimze,数据流程图建立新测算途径。启用model.prediction,建立新权重值和偏置。界定只测算一次特性。結果保留到含有一些作为前缀的调用函数。可塑性特性,TensorFlow实体模型结构型、归类。
import functools
def lazy_property(function):
attribute = '_lazy_' function.__name__
@property
@functools.wraps(function)
def wrapper(self):
if not hasattr(self, attribute):
setattr(self, attribute, function(self))
return getattr(self, attribute)
return wrapper
class Model:
def __init__(self, data, target):
self.data = data
self.target = target
self.prediction
self.optimize
self.error
@lazy_property
def prediction(self):
data_size = int(self.data.get_shape()[1])
target_size = int(self.target.get_shape()[1])
weight = tf.Variable(tf.truncated_nor ** l([data_size, target_size]))
bias = tf.Variable(tf.constant(0.1, shape=[target_size]))
incoming = tf. ** tmul(self.data, weight) bias
return tf.nn.soft ** x(incoming)
@lazy_property
def optimize(self):
cross_entropy = -tf.reduce_sum(self.target, tf.log(self.prediction))
optimizer = tf.train.RMSPropOptimizer(0.03)
return optimizer.minimize(cross_entropy)
@lazy_property
def error(self):
mistakes = tf.not_equal(
tf.arg ** x(self.target, 1), tf.arg ** x(self.prediction, 1))
return tf.reduce_mean(tf.cast(mistakes, tf.float32))
遮盖数据流程图装饰器。未确立特定使用寿命他数据流程图,TensorFlow应用默认设置。Jupyter Notebook,编译器情况在不一样一单元实行期内维持。原始默认设置数据流程图自始至终存有。实行再度界定数据流程图计算模块,加上到已存有数据流程图。依据菜单栏选择项重启kernel,再度运作全部模块。
建立订制数据流程图,设定默认设置。全部计算加上到该数据流程图,再度运作模块,建立新数据流程图。旧数据流图自动清理。
装饰器中建立数据流程图,装饰主函数。主函数定义详细数据流程图,界定占位符,函数调用建立实体模型。
import functools
import tensorflow as tf
def overwrite_graph(function):
@functools.wraps(function)
def wrapper(*args, **kwargs):
with tf.Graph().as_default():
return function(*args, **kwargs)
return wrapper
@overwrite_graph
def ** in():
data = tf.placeholder(...)
target = tf.placeholder(...)
model = Model()
** in()
API文档,编写代码时参考:
https:// ** .tensorflow.org/versions/ ** ster/api_docs/index.htmlGithub库,跟踪TensorFlow最新功能特性,阅读拉拽请求(pull request)、问题(issues)、发行记录(release note):
https://github.com/tensorflow/tensorflow分布式 TensorFlow:
https:// ** .tensorflow.org/versions/ ** ster/how_tos/distributed/index.html构建新TensorFlow功能:
https:// ** .tensorflow.org/ ** ster/how_tos/adding_an_op/index.html邮件列表:
https://groups.google.com/a/tensorflow.org/d/forum/discussStackOverflow:
http://stackoverflow.com/questions/tagged/tensorflow代码:
https://github.com/backstopmedia/tensorflowbook参考资料:
《面向机器智能的TensorFlow实践》
欢迎付费咨询(150元每小时),我的微信:qingxingfengzi
扫码咨询与免费使用
申请免费使用