pythonを使用して3.5.2 tensorflow rc 1.1ケラスモデルでテンソルフローメトリック関数を使用するにはどうすればよいですか?
私はケラスでテンソルフローメトリック関数を使用しようとしています。必要な機能のインターフェースは同じのようですが、呼び出し:エラーと
import pandas
import numpy
import tensorflow.contrib.keras as keras
import tensorflow
def target_function(row):
return float(row[0] - row[1] < 0.5)
df = pandas.DataFrame(numpy.random.rand(10000,2))
label = df.apply(target_function, axis=1)
input_layer = keras.layers.Input(shape=(2,))
net = keras.layers.Dense(1)(input_layer)
model = keras.models.Model(inputs=[input_layer], outputs=[net])
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=[tensorflow.metrics.auc])
model.fit(df.as_matrix(), label.as_matrix(), epochs=10, validation_split=0.2, batch_size=100)
結果:
Using TensorFlow backend.
Traceback (most recent call last):
File "/Users/ophir/dev/ophir/tf_keras_metrics.py", line 49, in <module>
metrics=[precision, recall, tensorflow.metrics.auc]
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/site-packages/keras/engine/training.py", line 956, in compile
metric_result = masked_metric_fn(y_true, y_pred, mask=masks[i])
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/site-packages/keras/engine/training.py", line 489, in masked
return K.mean(score_array)
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/site-packages/keras/backend/tensorflow_backend.py", line 1120, in mean
axis = _normalize_axis(axis, ndim(x))
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/site-packages/keras/backend/tensorflow_backend.py", line 437, in ndim
dims = x.get_shape()._dims
AttributeError: 'tuple' object has no attribute 'get_shape'
Process finished with exit code 1
EDIT
を
マルチンMożejkoからの提案をincoporatingた後、コードは次のとおりです。
import pandas
import numpy
import tensorflow.contrib.keras as keras
import tensorflow
def metric_function(y_true, y_pred):
return tensorflow.metrics.precision(y_true,y_pred)[0]
def target_function(row):
return float(row[0] - row[1] < 0.5)
df = pandas.DataFrame(numpy.random.rand(10000,2))
label = df.apply(target_function, axis=1)
input_layer = keras.layers.Input(shape=(2,))
net = keras.layers.Dense(1)(input_layer)
model = keras.models.Model(inputs=[input_layer], outputs=[net])
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=[metric_function])
model.fit(df.as_matrix(), label.as_matrix(), epochs=10, validation_split=0.2, batch_size=100)
とエラーは次のとおりです。
/Users/ophir/anaconda3/envs/p3/bin/python /Users/ophir/dev/ophir/tf_keras_metrics.py
Train on 8000 samples, validate on 2000 samples
Epoch 1/10
2017-04-04 16:05:30.959006: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
2017-04-04 16:05:30.959022: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
2017-04-04 16:05:30.959026: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.
2017-04-04 16:05:30.959031: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use FMA instructions, but these are available on your machine and could speed up CPU computations.
2017-04-04 16:05:31.124262: W tensorflow/core/framework/op_kernel.cc:1152] Failed precondition: Attempting to use uninitialized value precision/true_positives/count
[[Node: precision/true_positives/count/read = Identity[T=DT_FLOAT, _class=["loc:@precision/true_positives/count"], _device="/job:localhost/replica:0/task:0/cpu:0"](precision/true_positives/count)]]
Traceback (most recent call last):
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 1051, in _do_call
return fn(*args)
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 1033, in _run_fn
status, run_metadata)
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/contextlib.py", line 66, in __exit__
next(self.gen)
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/site-packages/tensorflow/python/framework/errors_impl.py", line 466, in raise_exception_on_not_ok_status
pywrap_tensorflow.TF_GetCode(status))
tensorflow.python.framework.errors_impl.FailedPreconditionError: Attempting to use uninitialized value precision/true_positives/count
[[Node: precision/true_positives/count/read = Identity[T=DT_FLOAT, _class=["loc:@precision/true_positives/count"], _device="/job:localhost/replica:0/task:0/cpu:0"](precision/true_positives/count)]]
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/ophir/dev/ophir/tf_keras_metrics.py", line 23, in <module>
model.fit(df.as_matrix(), label.as_matrix(), epochs=10, validation_split=0.2, batch_size=100)
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/site-packages/tensorflow/contrib/keras/python/keras/engine/training.py", line 1494, in fit
initial_epoch=initial_epoch)
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/site-packages/tensorflow/contrib/keras/python/keras/engine/training.py", line 1138, in _fit_loop
outs = f(ins_batch)
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/site-packages/tensorflow/contrib/keras/python/keras/backend.py", line 2245, in __call__
updated = session.run(self.outputs + [self.updates_op], feed_dict=feed_dict)
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 786, in run
run_metadata_ptr)
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 994, in _run
feed_dict_string, options, run_metadata)
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 1044, in _do_run
target_list, options, run_metadata)
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 1064, in _do_call
raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.FailedPreconditionError: Attempting to use uninitialized value precision/true_positives/count
[[Node: precision/true_positives/count/read = Identity[T=DT_FLOAT, _class=["loc:@precision/true_positives/count"], _device="/job:localhost/replica:0/task:0/cpu:0"](precision/true_positives/count)]]
Caused by op 'precision/true_positives/count/read', defined at:
File "/Users/ophir/dev/ophir/tf_keras_metrics.py", line 21, in <module>
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=[metric_function])
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/site-packages/tensorflow/contrib/keras/python/keras/engine/training.py", line 958, in compile
metric_result = masked_metric_fn(y_true, y_pred, mask=masks[i])
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/site-packages/tensorflow/contrib/keras/python/keras/engine/training.py", line 487, in masked
score_array = fn(y_true, y_pred)
File "/Users/ophir/dev/ophir/tf_keras_metrics.py", line 8, in metric_function
return tensorflow.metrics.precision(y_true,y_pred)[0]
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/site-packages/tensorflow/python/ops/metrics_impl.py", line 1377, in precision
updates_collections=None, name=None)
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/site-packages/tensorflow/python/ops/metrics_impl.py", line 1274, in true_positives
updates_collections)
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/site-packages/tensorflow/python/ops/metrics_impl.py", line 1211, in _count_condition
count = _create_local('count', shape=[])
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/site-packages/tensorflow/python/ops/metrics_impl.py", line 197, in _create_local
validate_shape=validate_shape)
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/site-packages/tensorflow/python/ops/variables.py", line 197, in __init__
expected_shape=expected_shape)
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/site-packages/tensorflow/python/ops/variables.py", line 316, in _init_from_args
self._snapshot = array_ops.identity(self._variable, name="read")
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/site-packages/tensorflow/python/ops/gen_array_ops.py", line 1343, in identity
result = _op_def_lib.apply_op("Identity", input=input, name=name)
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/site-packages/tensorflow/python/framework/op_def_library.py", line 768, in apply_op
op_def=op_def)
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/site-packages/tensorflow/python/framework/ops.py", line 2336, in create_op
original_op=self._default_original_op, op_def=op_def)
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/site-packages/tensorflow/python/framework/ops.py", line 1228, in __init__
self._traceback = _extract_stack()
FailedPreconditionError (see above for traceback): Attempting to use uninitialized value precision/true_positives/count
[[Node: precision/true_positives/count/read = Identity[T=DT_FLOAT, _class=["loc:@precision/true_positives/count"], _device="/job:localhost/replica:0/task:0/cpu:0"](precision/true_positives/count)]]
Exception ignored in: <bound method BaseSession.__del__ of <tensorflow.python.client.session.Session object at 0x1140626d8>>
Traceback (most recent call last):
File "/Users/ophir/anaconda3/envs/p3/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 595, in __del__
AttributeError: 'NoneType' object has no attribute 'TF_NewStatus'
Process finished with exit code 1
'model'定義を提供できますか? –
は問題を再現するダミーコードスニペットを追加しました –
'model = keras.models.Model(inputs = input_layer、outputs = net)'を試してください。 –