최근에 저는 TFLearn을 사용하여 맞춤식 심 신경 망 모델을 만들었습니다. TFLearn은 scikit-learn estimator API에 대해 깊이 배워야한다고 주장합니다. 모델을 훈련하고 예측을 할 수는 있지만 점수 계산 기능을 사용할 수 없기 때문에 교차 검증을 할 수 없었습니다. 여러 곳에서 TFLearn에 대한 질문을 시도했지만 응답이 없습니다.내 자신의 tf.Estimator를 구축하면 model_params가 model_dir을 어떻게 덮어 썼습니까? RuntimeWarning?
TensorFlow 자체에는 견적 클래스가있는 것으로 보입니다. 그래서 저는 TFLearn을 제쳐두고, https://www.tensorflow.org/extend/estimators에서 가이드를 따르려고합니다. 어떻게 든 그들은 그들이 속하지 않은 곳에서 변수를 얻는 것을 관리하고 있습니다. 누구든지 내 문제를 파악할 수 있습니까? 나는 코드와 출력을 올릴 것이다.
참고 : 물론 출력 맨 위에 RuntimeWarning이 표시됩니다. 나는 온라인에서이 경고에 대한 언급을 발견했지만, 지금까지 모든 사람들이 무해하다고 주장했다. 아마 ...하지
CODE :
import tensorflow as tf
from my_library import Database, l2_angle_distance
def my_model_function(topology, params):
# This function will eventually be a function factory. This should
# allow easy exploration of hyperparameters. For now, this just
# returns a single, fixed model_fn.
def model_fn(features, labels, mode):
# Input layer
net = tf.layers.conv1d(features["x"], topology[0], 3, activation=tf.nn.relu)
net = tf.layers.dropout(net, 0.25)
# The core of the network is here (convolutional layers only for now).
for nodes in topology[1:]:
net = tf.layers.conv1d(net, nodes, 3, activation=tf.nn.relu)
net = tf.layers.dropout(net, 0.25)
sh = tf.shape(features["x"])
net = tf.reshape(net, [sh[0], sh[1], 3, 2])
predictions = tf.nn.l2_normalize(net, dim=3)
# PREDICT EstimatorSpec
if mode == tf.estimator.ModeKeys.PREDICT:
return tf.estimator.EstimatorSpec(mode=mode,
predictions={"vectors": predictions})
# TRAIN or EVAL EstimatorSpec
loss = l2_angle_distance(labels, predictions)
optimizer = tf.train.GradientDescentOptimizer(learning_rate=params["learning_rate"])
train_op = optimizer.minimize(loss=loss, global_step=tf.train.get_global_step())
return tf.estimator.EstimatorSpec(mode, predictions, loss, train_op)
return model_fn
##===================================================================
window = "whole"
encoding = "one_hot"
db = Database("/home/bwllc/Documents/Files for ML/compact")
traindb, testdb = db.train_test_split()
train_features, train_labels = traindb.values(window, encoding)
test_features, test_labels = testdb.values(window, encoding)
# Create the model.
tf.logging.set_verbosity(tf.logging.INFO)
LEARNING_RATE = 0.01
topology = (60,40,20)
model_params = {"learning_rate": LEARNING_RATE}
model_fn = my_model_function(topology, model_params)
model = tf.estimator.Estimator(model_fn, model_params)
print("\nmodel_dir? No? Why not? ", model.model_dir, "\n") # This documents the error
# Input function.
my_input_fn = tf.estimator.inputs.numpy_input_fn({"x" : train_features}, train_labels, shuffle=True)
# Train the model.
model.train(input_fn=my_input_fn, steps=20)
OUTPUT
/usr/lib/python3.6/importlib/_bootstrap.py:219: RuntimeWarning: compiletime version 3.5 of module 'tensorflow.python.framework.fast_tensor_util' does not match runtime version 3.6
return f(*args, **kwds)
INFO:tensorflow:Using default config.
INFO:tensorflow:Using config: {'_model_dir': {'learning_rate': 0.01}, '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_service': None, '_cluster_spec': <tensorflow.python.training.server_lib.ClusterSpec object at 0x7f0b55279048>, '_task_type': 'worker', '_task_id': 0, '_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}
model_dir? No? Why not? {'learning_rate': 0.01}
INFO:tensorflow:Create CheckpointSaverHook.
Traceback (most recent call last):
File "minimal_estimator_bug_example.py", line 81, in <module>
model.train(input_fn=my_input_fn, steps=20)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/estimator/estimator.py", line 302, in train
loss = self._train_model(input_fn, hooks, saving_listeners)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/estimator/estimator.py", line 756, in _train_model
scaffold=estimator_spec.scaffold)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/basic_session_run_hooks.py", line 411, in __init__
self._save_path = os.path.join(checkpoint_dir, checkpoint_basename)
File "/usr/lib/python3.6/posixpath.py", line 78, in join
a = os.fspath(a)
TypeError: expected str, bytes or os.PathLike object, not dict
------------------
(program exited with code: 1)
Press return to continue
어떻게 든 값에 바인딩 갔다 (I 기본값으로 왼쪽) 잘못 model_dir 정확히 볼 수 있습니다
나는 model_params를 의도했다. 어떻게 내 코드에서 이런 일이 일어 났습니까? 나는 그것을 볼 수 없다.
누군가에게 조언이나 제안 사항이 있으면 크게 감사 드리겠습니다. 감사!
감사합니다, Lescurel! 나는 변화를 만들고 오류를 바로 잡았다. TensorFlow가 피 피닉 방식으로 작동하면 TypeError가 발생해야합니다. 또한, 나는 TensorFlow 문서가 현재 모순이라고 믿습니다. 앞서 언급 한 이전에 참조한 페이지 (https://www.tensorflow.org/extend/estimators)를 참조하십시오. "대조적으로, 처음부터 직접 견적을 작성하는 경우 생성자는 두 개의 상위 레벨 만 허용합니다 모델 구성, model_fn 및 매개 변수에 대한 매개 변수 : 'nn = tf.estimator.Estimator (model_fn = param = model_params)' " –
나는 불쾌한 행동에 동의하며 Tensorflow 개발자에게 통보 할 수 있습니다. (기분이 좋다면 [github issue] (https://github.com/tensorflow/tensorflow/issues)를여십시오). 그러나 제공 한 링크에서 예제는 키워드 인수를 사용하며 "* tf.estimator의 사전 정의 된 회귀 인자 및 분류 자와 마찬가지로 완료를 나타내는 메모가 있습니다. Estimator 초기화 프로그램은 일반적인 구성 인수 인 model_dir 및 config. *을 허용합니다." 그럼에도 불구하고 정보가 더 분명해질 수 있다는 것에 동의합니다. – Lescurel