我正在使用Tensorflow r0.12.
我在本地使用google-cloud-ml来运行2个不同的培训工作.在第一份工作中,我找到了我的变量的良好初始值.我将它们存储在V2检查点中.
当我尝试恢复我的变量以便在第二个作业中使用它们时:
import tensorflow as tf
sess = tf.Session()
new_saver = tf.train.import_meta_graph('../variables_pred/model.ckpt-10151.meta', clear_devices=True)
new_saver.restore(sess, tf.train.latest_checkpoint('../variables_pred/'))
all_vars = tf.trainable_variables()
for v in all_vars:
print(v.name)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
tensorflow.python.framework.errors_impl.InternalError: Unable to get element from the feed as bytes.
Run Code Online (Sandbox Code Playgroud)
在第一个作业中使用这些行创建检查点:
saver = tf.train.Saver()
saver.export_meta_graph(filename=os.path.join(output_dir, 'export.meta'))
saver.save(sess, os.path.join(output_dir, 'export'), write_meta_graph=False)
Run Code Online (Sandbox Code Playgroud)
根据这个答案,它可能来自缺少元数据文件,但我正在加载元数据文件.
PS:我使用这个论点clear_devices=True是因为在google-cloud-ml上发布产生的设备规格非常错综复杂,我不需要一定得到同样的调度.
我的目标是在谷歌云ml引擎上做出预测.
我按照谷歌的指示在linux ubuntu 16.04LT上安装了gcloud sdk .我已经有一台机器学习训练模型.我使用python版本anaconda python 3.5.
我跑:
gcloud ml-engine local predict --model-dir={MY_MODEL_DIR} --json-instances={MY_INPUT_JSON_INSTANCE}
Run Code Online (Sandbox Code Playgroud)
我收到了消息:错误:
(gcloud.ml-engine.local.predict)RuntimeError:.pyc文件中的错误幻数
下面是所有堆栈跟踪:
DEBUG: (gcloud.ml-engine.local.predict) RuntimeError: Bad magic number in .pyc file
Traceback (most recent call last):
File "/usr/lib/google-cloud-sdk/lib/googlecloudsdk/calliope/cli.py", line 797, in Execute
resources = calliope_command.Run(cli=self, args=args)
File "/usr/lib/google-cloud-sdk/lib/googlecloudsdk/calliope/backend.py", line 757, in Run
resources = command_instance.Run(args)
File "/usr/lib/google-cloud-sdk/lib/surface/ml_engine/local/predict.py", line 65, in Run
args.text_instances)
File "/usr/lib/google-cloud-sdk/lib/googlecloudsdk/command_lib/ml_engine/local_utils.py", line 89, in RunPredict
raise LocalPredictRuntimeError(err)
LocalPredictRuntimeError: RuntimeError: Bad magic number in .pyc file
ERROR: (gcloud.ml-engine.local.predict) RuntimeError: Bad …Run Code Online (Sandbox Code Playgroud) python google-cloud-platform gcloud tensorflow google-cloud-ml
谷歌云文档(请参阅预测输入中的二进制数据)指出:
必须将编码的字符串格式化为JSON对象,并使用名为b64的单个键.以下Python示例使用base64库对原始JPEG数据的缓冲区进行编码以生成实例:
Run Code Online (Sandbox Code Playgroud){"image_bytes":{"b64": base64.b64encode(jpeg_data)}}在TensorFlow模型代码中,您必须为输入和输出张量命名别名,以便它们以'_bytes'结尾.
我想了解更多有关此过程如何在Google云端运行的信息.
ml-engine是否会自动将"b64"字符串之后的任何内容解码为字节数据?
当请求具有此嵌套结构时,它是否仅将"b64"部分传递给服务输入函数并删除"image_bytes"键?
每个请求是单独传递给服务输入函数还是已经批处理?
我们是否在服务输入函数返回的ServingInputReceiver中定义输入输出别名?
我发现无法创建服务输入函数,该函数使用此嵌套结构来定义要素占位符.我只在我的中使用"b64"而且我不确定gcloud ml-engine在接收请求时会做什么.
另外,当在本地使用预测时gcloud ml-engine local predict,发送具有嵌套结构的请求失败,(意外的密钥image_bytes,因为它没有在服务输入函数中定义).但是在预测使用时gcloud ml-engine predict,即使服务输入函数不包含对"image_bytes"的引用,使用嵌套结构发送请求也能正常工作.当忽略"image_bytes"并传入"b64"时,gcloud预测也有效.
服务输入功能的示例
def serving_input_fn():
feature_placeholders = {'b64': tf.placeholder(dtype=tf.string,
shape=[None],
name='source')}
single_image = tf.decode_raw(feature_placeholders['b64'], tf.float32)
inputs = {'image': single_image}
return tf.estimator.export.ServingInputReceiver(inputs, feature_placeholders)
Run Code Online (Sandbox Code Playgroud)
我使用图像给出了示例,但我假设同样适用于作为字节和base64编码发送的所有类型的数据.
有很多stackoverflow问题,其中包含对包含"_bytes"信息片段的需求的引用,但我觉得如果有人可以详细解释一下这些内容会有什么用,那么我就不会如此受欢迎格式化请求时错过.
Stackoverflow关于此主题的问题
gcloud tensorflow-serving google-cloud-ml tensorflow-estimator
GCP 终于发布了托管 Jupyter 笔记本。我希望能够通过连接到笔记本电脑在本地进行交互。IE。我使用 PyCharm 通过传递其 URL 和令牌参数来连接到外部配置的 jupyter notebbok 服务器。
问题也适用于 AWS Sagemaker 笔记本。
amazon-web-services google-cloud-platform google-cloud-ml amazon-sagemaker gcp-ai-platform-notebook
使用tf.train.MonitoredTrainingSession它编写检查点文件时会以某种方式写入多个元图.我究竟做错了什么?
我把它剥离到下面的代码:
import tensorflow as tf
global_step = tf.Variable(0, dtype=tf.int32, trainable=False, name="global_step")
train = tf.assign(global_step, global_step + 1)
saver = tf.train.Saver()
hooks = [(tf.train.CheckpointSaverHook(checkpoint_dir=output_path + "test1/ckpt/",
save_steps = 10,
saver = saver))]
with tf.train.MonitoredTrainingSession(master = '',
is_chief = True,
checkpoint_dir = None,
hooks = hooks,
save_checkpoint_secs = None,
save_summaries_steps = None,
save_summaries_secs = None) as mon_sess:
for i in range(30):
if mon_sess.should_stop():
break
try:
gs, _ = mon_sess.run([global_step, train])
print(gs)
except (tf.errors.OutOfRangeError,tf.errors.CancelledError) as e:
break
finally:
pass
Run Code Online (Sandbox Code Playgroud)
运行此操作将提供重复的元图,如张量板警告所示: …
我有一个GCMLE实验,我正在尝试升级我input_fn以使用新tf.data功能.我已根据此示例创建了以下input_fn
def input_fn(...):
dataset = tf.data.Dataset.list_files(filenames).shuffle(num_shards) # shuffle up the list of input files
dataset = dataset.interleave(lambda filename: # mix together records from cycle_length number of shards
tf.data.TextLineDataset(filename).skip(1).map(lambda row: parse_csv(row, hparams)), cycle_length=5)
if shuffle:
dataset = dataset.shuffle(buffer_size = 10000)
dataset = dataset.repeat(num_epochs)
dataset = dataset.batch(batch_size)
iterator = dataset.make_one_shot_iterator()
features = iterator.get_next()
labels = features.pop(LABEL_COLUMN)
return features, labels
Run Code Online (Sandbox Code Playgroud)
我parse_csv和我之前使用的相同,但目前还没有.我可以解决一些问题,但我不完全理解为什么我遇到这些问题.这是我的parse_csv()函数的开始
def parse_csv(..):
columns = tf.decode_csv(rows, record_defaults=CSV_COLUMN_DEFAULTS)
raw_features = dict(zip(FIELDNAMES, columns))
words = …Run Code Online (Sandbox Code Playgroud) 使用该命令创建ML Engine Model的新版本时
gcloud ml-engine versions create 'v1' --model=model_name --origin=gs://path_to_model/1/ --runtime-version=1.4
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
ERROR: (gcloud.ml-engine.versions.create) FAILED_PRECONDITION: Field: version.deployment_uri Error: Read permissions are required for Cloud ML service account cloud-ml-service@**********.iam.gserviceaccount.com to the model file gs://path_to_model/1/saved_model.pb.
- '@type': type.googleapis.com/google.rpc.BadRequest
fieldViolations:
- description: Read permissions are required for Cloud ML service account cloud-ml-service@**********.iam.gserviceaccount.com to the model file gs://path_to_model/1/saved_model.pb.
field: version.deployment_uri
Run Code Online (Sandbox Code Playgroud)
此服务帐户未在IAM和管理面板中列出,并且不属于我的项目,因此我不想手动为此帐户授予权限.
有没有其他人也经历过这个?关于我应该做什么的任何建议?
附加信息:
谷歌存储桶具有存储类regional和位置europe-west1.
我已经尝试使用该命令禁用(并重新启用)ML Engine服务
gcloud services disable ml.googleapis.com
Run Code Online (Sandbox Code Playgroud)
但是这导致了以下错误:
ERROR: (gcloud.services.disable) The operation with ID tmo-acf.********-****-****-****-************ resulted …Run Code Online (Sandbox Code Playgroud)Google Cloud ML-engine支持部署scikit-learn Pipeline对象的功能.例如,文本分类Pipeline可能如下所示,
classifier = Pipeline([
('vect', CountVectorizer()),
('clf', naive_bayes.MultinomialNB())])
Run Code Online (Sandbox Code Playgroud)
分类器可以训练,
classifier.fit(train_x, train_y)
Run Code Online (Sandbox Code Playgroud)
然后可以将分类器上传到Google云端存储,
model = 'model.joblib'
joblib.dump(classifier, model)
model_remote_path = os.path.join('gs://', bucket_name, datetime.datetime.now().strftime('model_%Y%m%d_%H%M%S'), model)
subprocess.check_call(['gsutil', 'cp', model, model_remote_path], stderr=sys.stdout)
Run Code Online (Sandbox Code Playgroud)
然后,Model并且Version可以被创建,或者通过谷歌云端控制台,或编程,连接'model.joblib'文件中Version.
然后,可以通过调用已部署的模型predict端点将此分类器用于预测新数据,
ml = discovery.build('ml','v1')
project_id = 'projects/{}/models/{}'.format(project_name, model_name)
if version_name is not None:
project_id += '/versions/{}'.format(version_name)
request_dict = {'instances':['Test data']}
ml_request = ml.projects().predict(name=project_id, body=request_dict).execute()
Run Code Online (Sandbox Code Playgroud)
Google Cloud ML引擎调用predict分类器的功能并返回预测的类.但是,我希望能够返回置信度分数.通常这可以通过调用predict_proba …
(注意:我也在这里问过这个问题)
我一直在尝试让 Google Cloud 的 AI 平台显示在 AI 平台上训练的 Keras 模型的准确性。我配置了超参数调整,hptuning_config.yaml它工作正常。但是,我无法让 AI 平台tf.summary.scalar在训练期间接听电话。
我一直在关注以下文档页面:
1.超参数调优概述
2.使用超参数调优
根据[1]:
AI Platform Training 如何获取您的指标 您可能会注意到,本文档中没有关于将您的超参数指标传递给 AI Platform Training 训练服务的说明。这是因为该服务会监控由您的训练应用程序生成的 TensorFlow 摘要事件并检索指标。”
根据[2],生成此类 Tensorflow 摘要事件的一种方法是创建一个回调类,如下所示:
class MyMetricCallback(tf.keras.callbacks.Callback):
def on_epoch_end(self, epoch, logs=None):
tf.summary.scalar('metric1', logs['RootMeanSquaredError'], epoch)
Run Code Online (Sandbox Code Playgroud)
所以在我的代码中我包括:
# hptuning_config.yaml
trainingInput:
hyperparameters:
goal: MAXIMIZE
maxTrials: 4
maxParallelTrials: 2
hyperparameterMetricTag: val_accuracy
params:
- parameterName: learning_rate
type: DOUBLE
minValue: 0.001
maxValue: 0.01
scaleType: UNIT_LOG_SCALE …Run Code Online (Sandbox Code Playgroud) google-cloud-platform keras tensorflow google-cloud-ml gcp-ai-platform-training