- N +

directory not empty?linux 移動文件夾

mahout面試題

Mahout是一個基于Hadoop的機器學習庫,用于大規模數據集的分布式計算。面試題可能涉及Mahout的基本概念、算法和應用場景。例如,你可能會被問到Mahout支持哪些機器學習算法,如何在Hadoop集群上使用Mahout進行數據分析,以及如何優化Mahout的性能。此外,你可能還會被要求解釋Mahout與其他機器學習庫(如TensorFlow或Scikit-learn)之間的區別和優勢。準備面試時,建議你熟悉Mahout的核心概念和常用算法,并能夠提供實際應用案例來展示你的理解和經驗。

TensorFlow中有哪些高級API如何使用

背景調查公司Onfido研究主管PeterRoelants在Medium上發表了一篇題為《Higher-LevelAPIsinTensorFlow》的文章,通過實例詳細介紹了如何使用TensorFlow中的高級API(Estimator、Experiment和Dataset)訓練模型。值得一提的是Experiment和Dataset可以獨立使用。這些高級API已被最新發布的TensorFlow1.3版收錄。

TensorFlow中有許多流行的庫,如Keras、TFLearn和Sonnet,它們可以讓你輕松訓練模型,而無需接觸哪些低級別函數。目前,KerasAPI正傾向于直接在TensorFlow中實現,TensorFlow也在提供越來越多的高級構造,其中的一些已經被最新發布的TensorFlow1.3版收錄。

在本文中,我們將通過一個例子來學習如何使用一些高級構造,其中包括Estimator、Experiment和Dataset。閱讀本文需要預先了解有關TensorFlow的基本知識。

Experiment、Estimator和DataSet框架和它們的相互作用(以下將對這些組件進行說明)

在本文中,我們使用MNIST作為數據集。它是一個易于使用的數據集,可以通過TensorFlow訪問。你可以在這個gist中找到完整的示例代碼。使用這些框架的一個好處是我們不需要直接處理圖形和會話。

Estimator

Estimator(評估器)類代表一個模型,以及這些模型被訓練和評估的方式。我們可以這樣構建一個評估器:

returntf.estimator.Estimator(

model_fn=model_fn,#First-classfunction

params=params,#HParams

config=run_config#RunConfig

)

為了構建一個Estimator,我們需要傳遞一個模型函數,一個參數集合以及一些配置。

參數應該是模型超參數的集合,它可以是一個字典,但我們將在本示例中將其表示為HParams對象,用作namedtuple。

該配置指定如何運行訓練和評估,以及如何存出結果。這些配置通過RunConfig對象表示,該對象傳達Estimator需要了解的關于運行模型的環境的所有內容。

模型函數是一個Python函數,它構建了給定輸入的模型(見后文)。

模型函數

模型函數是一個Python函數,它作為第一級函數傳遞給Estimator。稍后我們就會看到,TensorFlow也會在其他地方使用第一級函數。模型表示為函數的好處在于模型可以通過實例化函數不斷重新構建。該模型可以在訓練過程中被不同的輸入不斷創建,例如:在訓練期間運行驗證測試。

模型函數將輸入特征作為參數,相應標簽作為張量。它還有一種模式來標記模型是否正在訓練、評估或執行推理。模型函數的最后一個參數是超參數的集合,它們與傳遞給Estimator的內容相同。模型函數需要返回一個EstimatorSpec對象——它會定義完整的模型。

EstimatorSpec接受預測,損失,訓練和評估幾種操作,因此它定義了用于訓練,評估和推理的完整模型圖。由于EstimatorSpec采用常規TensorFlowOperations,因此我們可以使用像TF-Slim這樣的框架來定義自己的模型。

Experiment

Experiment(實驗)類是定義如何訓練模型,并將其與Estimator進行集成的方式。我們可以這樣創建一個實驗類:

experiment=tf.contrib.learn.Experiment(

estimator=estimator,#Estimator

train_input_fn=train_input_fn,#First-classfunction

eval_input_fn=eval_input_fn,#First-classfunction

train_steps=params.train_steps,#Minibatchsteps

min_eval_frequency=params.min_eval_frequency,#Evalfrequency

train_monitors=[train_input_hook],#Hooksfortraining

eval_hooks=[eval_input_hook],#Hooksforevaluation

eval_steps=None#Useevaluationfeederuntilitsempty

)

Experiment作為輸入:

一個Estimator(例如上面定義的那個)。

訓練和評估數據作為第一級函數。這里用到了和前述模型函數相同的概念,通過傳遞函數而非操作,如有需要,輸入圖可以被重建。我們會在后面繼續討論這個概念。

訓練和評估鉤子(hooks)。這些鉤子可以用于監視或保存特定內容,或在圖形和會話中進行一些操作。例如,我們將通過操作來幫助初始化數據加載器。

不同參數解釋了訓練時間和評估時間。

一旦我們定義了experiment,我們就可以通過learn_runner.run運行它來訓練和評估模型:

learn_runner.run(

experiment_fn=experiment_fn,#First-classfunction

run_config=run_config,#RunConfig

schedule="train_and_evaluate",#Whattorun

hparams=params#HParams

)

與模型函數和數據函數一樣,函數中的學習運算符將創建experiment作為參數。

Dataset

我們將使用Dataset類和相應的Iterator來表示我們的訓練和評估數據,并創建在訓練期間迭代數據的數據饋送器。在本示例中,我們將使用TensorFlow中可用的MNIST數據,并在其周圍構建一個Dataset包裝器。例如,我們把訓練的輸入數據表示為:

#Definethetraininginputs

defget_train_inputs(batch_size,mnist_data):

"""Returntheinputfunctiontogetthetrainingdata.

Args:

batch_size(int):Batchsizeoftrainingiteratorthatisreturned

bytheinputfunction.

mnist_data(Object):Objectholdingtheloadedmnistdata.

Returns:

(Inputfunction,IteratorInitializerHook):

-Functionthatreturns(features,labels)whencalled.

-Hooktoinitialiseinputiterator.

"""

iterator_initializer_hook=IteratorInitializerHook()

deftrain_inputs():

"""ReturnstrainingsetasOperations.

Returns:

(features,labels)Operationsthatiterateoverthedataset

oneveryevaluation

"""

withtf.name_scope('Training_data'):

#GetMnistdata

images=mnist_data.train.images.reshape([-1,28,28,1])

labels=mnist_data.train.labels

#Defineplaceholders

images_placeholder=tf.placeholder(

images.dtype,images.shape)

labels_placeholder=tf.placeholder(

labels.dtype,labels.shape)

#Builddatasetiterator

dataset=tf.contrib.data.Dataset.from_tensor_slices(

(images_placeholder,labels_placeholder))

dataset=dataset.repeat(None)#Infiniteiterations

dataset=dataset.shuffle(buffer_size=10000)

dataset=dataset.batch(batch_size)

iterator=dataset.make_initializable_iterator()

next_example,next_label=iterator.get_next()

#Setrunhooktoinitializeiterator

iterator_initializer_hook.iterator_initializer_func=\

lambdasess:sess.run(

iterator.initializer,

feed_dict={images_placeholder:images,

labels_placeholder:labels})

#Returnbatched(features,labels)

returnnext_example,next_label

#Returnfunctionandhook

returntrain_inputs,iterator_initializer_hook

調用這個get_train_inputs會返回一個一級函數,它在TensorFlow圖中創建數據加載操作,以及一個Hook初始化迭代器。

本示例中,我們使用的MNIST數據最初表示為Numpy數組。我們創建一個占位符張量來獲取數據,再使用占位符來避免數據被復制。接下來,我們在from_tensor_slices的幫助下創建一個切片數據集。我們將確保該數據集運行無限長時間(experiment可以考慮epoch的數量),讓數據得到清晰,并分成所需的尺寸。

為了迭代數據,我們需要在數據集的基礎上創建迭代器。因為我們正在使用占位符,所以我們需要在NumPy數據的相關會話中初始化占位符。我們可以通過創建一個可初始化的迭代器來實現。創建圖形時,我們將創建一個自定義的IteratorInitializerHook對象來初始化迭代器:

classIteratorInitializerHook(tf.train.SessionRunHook):

"""HooktoinitialisedataiteratorafterSessioniscreated."""

def__init__(self):

super(IteratorInitializerHook,self).__init__()

self.iterator_initializer_func=None

defafter_create_session(self,session,coord):

"""Initialisetheiteratorafterthesessionhasbeencreated."""

self.iterator_initializer_func(session)

IteratorInitializerHook繼承自SessionRunHook。一旦創建了相關會話,這個鉤子就會調用callafter_create_session,并用正確的數據初始化占位符。這個鉤子會通過get_train_inputs函數返回,并在創建時傳遞給Experiment對象。

train_inputs函數返回的數據加載操作是TensorFlow操作,每次評估時都會返回一個新的批處理。

運行代碼

現在我們已經定義了所有的東西,我們可以用以下命令運行代碼:

pythonmnist_estimator.py—model_dir./mnist_training—data_dir./mnist_data

如果你不傳遞參數,它將使用文件頂部的默認標志來確定保存數據和模型的位置。訓練將在終端輸出全局步長、損失、精度等信息。除此之外,實驗和估算器框架將記錄TensorBoard可以顯示的某些統計信息。如果我們運行:

tensorboard—logdir='./mnist_training'

我們就可以看到所有訓練統計數據,如訓練損失、評估準確性、每步時間和模型圖。

評估精度在TensorBoard中的可視化

在TensorFlow中,有關Estimator、Experiment和Dataset框架的示例很少,這也是本文存在的原因。希望這篇文章可以向大家介紹這些架構工作的原理,它們應該采用哪些抽象方法,以及如何使用它們。如果你對它們很感興趣,以下是其他相關文檔。

關于Estimator、Experiment和Dataset的注釋

論文《TensorFlowEstimators:ManagingSimplicityvs.FlexibilityinHigh-LevelMachineLearningFrameworks》:https://terrytangyuan.github.io/data/papers/tf-estimators-kdd-paper.pdf

UsingtheDatasetAPIforTensorFlowInputPipelines:https://www.tensorflow.org/versions/r1.3/programmers_guide/datasets

tf.estimator.Estimator:https://www.tensorflow.org/api_docs/python/tf/estimator/Estimator

tf.contrib.learn.RunConfig:https://www.tensorflow.org/api_docs/python/tf/contrib/learn/RunConfig

tf.estimator.DNNClassifier:https://www.tensorflow.org/api_docs/python/tf/estimator/DNNClassifier

tf.estimator.DNNRegressor:https://www.tensorflow.org/api_docs/python/tf/estimator/DNNRegressor

CreatingEstimatorsintf.estimator:https://www.tensorflow.org/extend/estimators

tf.contrib.learn.Head:https://www.tensorflow.org/api_docs/python/tf/contrib/learn/Head

本文用到的Slim框架:https://github.com/tensorflow/models/tree/master/slim

完整示例

"""Scripttoillustrateusageoftf.estimator.EstimatorinTFv1.3"""

importtensorflowastf

fromtensorflow.examples.tutorials.mnistimportinput_dataasmnist_data

fromtensorflow.contribimportslim

fromtensorflow.contrib.learnimportModeKeys

fromtensorflow.contrib.learnimportlearn_runner

#Showdebuggingoutput

tf.logging.set_verbosity(tf.logging.DEBUG)

#Setdefaultflagsfortheoutputdirectories

FLAGS=tf.app.flags.FLAGS

tf.app.flags.DEFINE_string(

flag_name='model_dir',default_value='./mnist_training',

docstring='Outputdirectoryformodelandtrainingstats.')

tf.app.flags.DEFINE_string(

flag_name='data_dir',default_value='./mnist_data',

docstring='Directorytodownloadthedatato.')

#Defineandrunexperiment###############################

defrun_experiment(argv=None):

#Definemodelparameters

params=tf.contrib.training.HParams(

learning_rate=0.002,

n_classes=10,

train_steps=5000,

min_eval_frequency=100

)

#Settherun_configandthedirectorytosavethemodelandstats

run_config=tf.contrib.learn.RunConfig()

run_config=run_config.replace(model_dir=FLAGS.model_dir)

learn_runner.run(

experiment_fn=experiment_fn,#First-classfunction

run_config=run_config,#RunConfig

schedule="train_and_evaluate",#Whattorun

hparams=params#HParams

)

defexperiment_fn(run_config,params):

"""Createanexperimenttotrainandevaluatethemodel.

Args:

run_config(RunConfig):ConfigurationforEstimatorrun.

params(HParam):Hyperparameters

Returns:

(Experiment)Experimentfortrainingthemnistmodel.

"""

#Youcanchangeasubsetoftherun_configpropertiesas

run_config=run_config.replace(

save_checkpoints_steps=params.min_eval_frequency)

#Definethemnistclassifier

estimator=get_estimator(run_config,params)

#Setupdataloaders

mnist=mnist_data.read_data_sets(FLAGS.data_dir,one_hot=False)

train_input_fn,train_input_hook=get_train_inputs(

batch_size=128,mnist_data=mnist)

eval_input_fn,eval_input_hook=get_test_inputs(

batch_size=128,mnist_data=mnist)

#Definetheexperiment

experiment=tf.contrib.learn.Experiment(

estimator=estimator,#Estimator

train_input_fn=train_input_fn,#First-classfunction

eval_input_fn=eval_input_fn,#First-classfunction

train_steps=params.train_steps,#Minibatchsteps

min_eval_frequency=params.min_eval_frequency,#Evalfrequency

train_monitors=[train_input_hook],#Hooksfortraining

eval_hooks=[eval_input_hook],#Hooksforevaluation

eval_steps=None#Useevaluationfeederuntilitsempty

)

returnexperiment

#Definemodel############################################

defget_estimator(run_config,params):

"""ReturnthemodelasaTensorflowEstimatorobject.

Args:

run_config(RunConfig):ConfigurationforEstimatorrun.

params(HParams):hyperparameters.

"""

returntf.estimator.Estimator(

model_fn=model_fn,#First-classfunction

params=params,#HParams

config=run_config#RunConfig

)

defmodel_fn(features,labels,mode,params):

"""Modelfunctionusedintheestimator.

Args:

features(Tensor):Inputfeaturestothemodel.

labels(Tensor):Labelstensorfortrainingandevaluation.

mode(ModeKeys):Specifiesiftraining,evaluationorprediction.

params(HParams):hyperparameters.

Returns:

(EstimatorSpec):ModeltoberunbyEstimator.

"""

is_training=mode==ModeKeys.TRAIN

#Definemodel'sarchitecture

logits=architecture(features,is_training=is_training)

predictions=tf.argmax(logits,axis=-1)

loss=tf.losses.sparse_softmax_cross_entropy(

labels=tf.cast(labels,tf.int32),

logits=logits

)

returntf.estimator.EstimatorSpec(

mode=mode,

predictions=predictions,

loss=loss,

train_op=get_train_op_fn(loss,params),

eval_metric_ops=get_eval_metric_ops(labels,predictions)

)

defget_train_op_fn(loss,params):

"""GetthetrainingOp.

Args:

loss(Tensor):ScalarTensorthatrepresentsthelossfunction.

params(HParams):Hyperparameters(needstohave`learning_rate`)

Returns:

TrainingOp

"""

returntf.contrib.layers.optimize_loss(

loss=loss,

global_step=tf.contrib.framework.get_global_step(),

optimizer=tf.train.AdamOptimizer,

learning_rate=params.learning_rate

)

defget_eval_metric_ops(labels,predictions):

"""ReturnadictoftheevaluationOps.

Args:

labels(Tensor):Labelstensorfortrainingandevaluation.

predictions(Tensor):PredictionsTensor.

Returns:

Dictofmetricresultskeyedbyname.

"""

return{

'Accuracy':tf.metrics.accuracy(

labels=labels,

predictions=predictions,

name='accuracy')

}

defarchitecture(inputs,is_training,scope='MnistConvNet'):

"""Returntheoutputoperationfollowingthenetworkarchitecture.

Args:

inputs(Tensor):InputTensor

is_training(bool):Trueiffintrainingmode

scope(str):Nameofthescopeofthearchitecture

Returns:

LogitsoutputOpforthenetwork.

"""

withtf.variable_scope(scope):

withslim.arg_scope(

[slim.conv2d,slim.fully_connected],

weights_initializer=tf.contrib.layers.xavier_initializer()):

net=slim.conv2d(inputs,20,[5,5],padding='VALID',

scope='conv1')

net=slim.max_pool2d(net,2,stride=2,scope='pool2')

net=slim.conv2d(net,40,[5,5],padding='VALID',

scope='conv3')

net=slim.max_pool2d(net,2,stride=2,scope='pool4')

net=tf.reshape(net,[-1,4*4*40])

net=slim.fully_connected(net,256,scope='fn5')

net=slim.dropout(net,is_training=is_training,

scope='dropout5')

net=slim.fully_connected(net,256,scope='fn6')

net=slim.dropout(net,is_training=is_training,

scope='dropout6')

net=slim.fully_connected(net,10,scope='output',

activation_fn=None)

returnnet

#Definedataloaders#####################################

classIteratorInitializerHook(tf.train.SessionRunHook):

"""HooktoinitialisedataiteratorafterSessioniscreated."""

def__init__(self):

super(IteratorInitializerHook,self).__init__()

self.iterator_initializer_func=None

defafter_create_session(self,session,coord):

"""Initialisetheiteratorafterthesessionhasbeencreated."""

self.iterator_initializer_func(session)

#Definethetraininginputs

defget_train_inputs(batch_size,mnist_data):

"""Returntheinputfunctiontogetthetrainingdata.

Args:

batch_size(int):Batchsizeoftrainingiteratorthatisreturned

bytheinputfunction.

mnist_data(Object):Objectholdingtheloadedmnistdata.

Returns:

(Inputfunction,IteratorInitializerHook):

-Functionthatreturns(features,labels)whencalled.

-Hooktoinitialiseinputiterator.

"""

iterator_initializer_hook=IteratorInitializerHook()

deftrain_inputs():

"""ReturnstrainingsetasOperations.

Returns:

(features,labels)Operationsthatiterateoverthedataset

oneveryevaluation

"""

withtf.name_scope('Training_data'):

#GetMnistdata

images=mnist_data.train.images.reshape([-1,28,28,1])

labels=mnist_data.train.labels

#Defineplaceholders

images_placeholder=tf.placeholder(

images.dtype,images.shape)

labels_placeholder=tf.placeholder(

labels.dtype,labels.shape)

#Builddatasetiterator

dataset=tf.contrib.data.Dataset.from_tensor_slices(

(images_placeholder,labels_placeholder))

dataset=dataset.repeat(None)#Infiniteiterations

dataset=dataset.shuffle(buffer_size=10000)

dataset=dataset.batch(batch_size)

iterator=dataset.make_initializable_iterator()

next_example,next_label=iterator.get_next()

#Setrunhooktoinitializeiterator

iterator_initializer_hook.iterator_initializer_func=\

lambdasess:sess.run(

iterator.initializer,

feed_dict={images_placeholder:images,

labels_placeholder:labels})

#Returnbatched(features,labels)

returnnext_example,next_label

#Returnfunctionandhook

returntrain_inputs,iterator_initializer_hook

defget_test_inputs(batch_size,mnist_data):

"""Returntheinputfunctiontogetthetestdata.

Args:

batch_size(int):Batchsizeoftrainingiteratorthatisreturned

bytheinputfunction.

mnist_data(Object):Objectholdingtheloadedmnistdata.

Returns:

(Inputfunction,IteratorInitializerHook):

-Functionthatreturns(features,labels)whencalled.

-Hooktoinitialiseinputiterator.

"""

iterator_initializer_hook=IteratorInitializerHook()

deftest_inputs():

"""ReturnstrainingsetasOperations.

Returns:

(features,labels)Operationsthatiterateoverthedataset

oneveryevaluation

"""

withtf.name_scope('Test_data'):

#GetMnistdata

images=mnist_data.test.images.reshape([-1,28,28,1])

labels=mnist_data.test.labels

#Defineplaceholders

images_placeholder=tf.placeholder(

images.dtype,images.shape)

labels_placeholder=tf.placeholder(

labels.dtype,labels.shape)

#Builddatasetiterator

dataset=tf.contrib.data.Dataset.from_tensor_slices(

(images_placeholder,labels_placeholder))

dataset=dataset.batch(batch_size)

iterator=dataset.make_initializable_iterator()

next_example,next_label=iterator.get_next()

#Setrunhooktoinitializeiterator

iterator_initializer_hook.iterator_initializer_func=\

lambdasess:sess.run(

iterator.initializer,

feed_dict={images_placeholder:images,

labels_placeholder:labels})

returnnext_example,next_label

#Returnfunctionandhook

returntest_inputs,iterator_initializer_hook

#Runscript##############################################

if__name__=="__main__":

tf.app.run(

main=run_experiment

)

如何給oracle導入blob和clob字段

例:假設給oracle數據庫導入blob類型的圖片,圖片放在目錄G:\images下。

1.先創建一個目錄directory,命名為IMAGES;CREATEORREPLACEDIRE,TORYIMAGESAS'G:\test';或者直接在PlSqlDirectories目錄下新建目錄;

2.創建一個存儲過程,批量導入blobcreateorreplaceprocedureimg_insertasbeginDECLAREf_lobbfile;--文件類型b_lobblob;--用來存儲圖片的名稱filenamevarchar2(400);begin--循環的初始值foriin1..100loop--找出每一列的文件名,因為文件名和圖片名稱是一樣的selectt.flnmintofilenamefromZS_GC_SNIMDTtwheret.id=i;--查找到之后,執行update操作,插入空的blob(注意IMAGES一定要大寫)updateZS_GC_SNIMDTsetbrfl=empty_blob()whereid=ireturnbrflintob_lob;--獲取指定目錄下的文件f_lob:=bfilename('IMAGES',filename);--以只讀的方式打開文件dbms_lob.fileopen(f_lob,dbms_lob.file_readonly);--傳遞對象dbms_lob.loadfromfile(b_lob,f_lob,dbms_lob.getlength(f_lob));--關閉原始文件

xcode怎么新建項目

1.新建項目的方法很簡單。2.首先,打開Xcode軟件,點擊“CreateanewXcodeproject”按鈕,然后選擇項目類型和模板,填寫項目名稱和其他相關信息,最后點擊“Next”按鈕即可。3.如果需要添加文件或者修改項目設置,可以在創建項目后進行操作。同時,Xcode還提供了豐富的工具和功能,可以幫助開發者更高效地完成項目開發。

返回列表
上一篇:
下一篇: