Sagemakerで独自モデルのハイパーパラメーターをチューニングしようとしているのですが、躓いてます。
独自モデルがLSTMのため、NumpyアレイをCSVに変換すると意味がなくなるので、入力にそのままNumpyアレイを使っているのですが、下記のコードでエラーになります。Jupyper Notebookで開発をしています。下記コードで、train_x, train_yがnumpyアレイです。
Python
1inputs = {'train': train_x, 'test': train_t} 2import shortuuid 3uuid = shortuuid.ShortUUID().random(length=8) 4estimator.fit(job_name=f'{PROJECT_NAME}-{VERSION}-s-{uuid}', inputs=inputs)
実行結果が、
ValueError Traceback (most recent call last)
<ipython-input-180-ff3462deb06b> in <module>()
----> 1 estimator.fit(job_name=f'{PROJECT_NAME}-{VERSION}-s-{uuid}', inputs=inputs)
~/anaconda3/envs/tensorflow_p36/lib/python3.6/site-packages/sagemaker/tensorflow/estimator.py in fit(self, inputs, wait, logs, job_name, experiment_config, run_tensorboard_locally)
464 tensorboard.join()
465 else:
--> 466 fit_super()
467
468 @classmethod
~/anaconda3/envs/tensorflow_p36/lib/python3.6/site-packages/sagemaker/tensorflow/estimator.py in fit_super()
443
444 def fit_super():
--> 445 super(TensorFlow, self).fit(inputs, wait, logs, job_name, experiment_config)
446
447 if run_tensorboard_locally and wait is False:
~/anaconda3/envs/tensorflow_p36/lib/python3.6/site-packages/sagemaker/estimator.py in fit(self, inputs, wait, logs, job_name, experiment_config)
460 self._prepare_for_training(job_name=job_name)
461
--> 462 self.latest_training_job = _TrainingJob.start_new(self, inputs, experiment_config)
463 self.jobs.append(self.latest_training_job)
464 if wait:
~/anaconda3/envs/tensorflow_p36/lib/python3.6/site-packages/sagemaker/estimator.py in start_new(cls, estimator, inputs, experiment_config)
964 )
965
--> 966 config = _Job._load_config(inputs, estimator)
967
968 if estimator.hyperparameters() is not None:
~/anaconda3/envs/tensorflow_p36/lib/python3.6/site-packages/sagemaker/job.py in _load_config(inputs, estimator, expand_role, validate_uri)
77 validate_uri:
78 """
---> 79 input_config = _Job._format_inputs_to_input_config(inputs, validate_uri)
80 role = (
81 estimator.sagemaker_session.expand_role(estimator.role)
~/anaconda3/envs/tensorflow_p36/lib/python3.6/site-packages/sagemaker/job.py in _format_inputs_to_input_config(inputs, validate_uri)
151 elif isinstance(inputs, dict):
152 for k, v in inputs.items():
--> 153 input_dict[k] = _Job._format_string_uri_input(v, validate_uri)
154 elif isinstance(inputs, list):
155 input_dict = _Job._format_record_set_list_input(inputs)
~/anaconda3/envs/tensorflow_p36/lib/python3.6/site-packages/sagemaker/job.py in _format_string_uri_input(uri_input, validate_uri, content_type, input_mode, compression, target_attribute_name)
225 raise ValueError(
226 "Cannot format input {}. Expecting one of str, s3_input, file_input or "
--> 227 "FileSystemInput".format(uri_input)
228 )
229
ValueError: Cannot format input [[[0. 0.00584795 0.00194932 ... 0.00194932 0.00194932 0.00194932]
[0. 0.00584795 0.00194932 ... 0.00194932 0.00194932 0.00194932]
(中略)
[0. 0.00584795 0.00194932 ... 0.00194932 0.00194932 0.00194932]
[0. 0.00584795 0.00194932 ... 0.00194932 0.00194932 0.00194932]]]. Expecting one of str, s3_input, file_input or FileSystemInput
という感じになります。エラーメッセージの最後の行で"Expecting one of str, s3_input, file_input or FileSystemInput"とありますが、ここは指定しているように思うのですが…
お聞きしたいのが、
①そもそもSagemakerはnumpyアレイをそのままinputにするとハイパーパラメーターチューニングができない?
②もしできるとすればinputの指定方法が誤っている?
という点です。
よろしくお願いいたします。
あなたの回答
tips
プレビュー