编码:
import numpy as np
import tensorflow as tf
import pandas as pd
from sklearn.model_selection import train_test_split
x_data = np.linspace(0, 1000000, 1000)
y_true = np.sin(x_data)
y_true += np.random.randn(len(x_data))
feature_columns = [tf.feature_column.numeric_column('x', shape=[1])]
estimator = tf.estimator.DNNRegressor(feature_columns=feature_columns, hidden_units=[10,10,10], optimizer=lambda:
tf.train.AdamOptimizer(
learning_rate=0.1
))
X_train, X_test, y_train, y_test = train_test_split(x_data, y_true, test_size=0.3)
input_function = tf.estimator.inputs.numpy_input_fn({'x': X_train},y_train,
batch_size=8, num_epochs=None,
shuffle=True)
train_input_function = tf.estimator.inputs.numpy_input_fn({'x': X_train},y_train,
batch_size=8, num_epochs=1000,
shuffle=False)
test_input_function = tf.estimator.inputs.numpy_input_fn({'x': X_test},y_test,
batch_size=8, num_epochs=1000,
shuffle=False)
estimator.train(input_fn=input_function, steps=1000)
train_metrics = estimator.evaluate(input_fn=train_input_function, steps=1000)
test_metrics = estimator.evaluate(input_fn=test_input_function, steps=1000)
print('TRAINING DATA METRICS')
print(train_metrics)
print()
print('TEST DATA METRICS')
print(test_metrics)
print()
效果很好。但是,如果我将 line 更改y_true = np.sin(x_data)
为y_true=tf.square(x_data)
,则会出现错误:
回溯(最近一次调用):文件“C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\framework\ops.py”,第 1576 行,在 _create_c_op c_op = c_api.TF_FinishOperation(op_desc) tensorflow.python.framework.errors_impl.InvalidArgumentError: Shape must be rank 1 but is rank 2 for 'strided_slice' (op: 'StridedSlice') 输入形状:[1000], [1,700], [ 1,700],[1]。
在处理上述异常的过程中,又发生了一个异常:
回溯(最近一次调用):文件“C:/Users/Admin/Documents/PycharmProjects/TF_API_2/api.py”,第 21 行,在 X_train, X_test, y_train, y_test = train_test_split(x_data, y_true, test_size=0.3)文件“C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\sklearn\model_selection_split.py”,第 2059 行,在 train_test_split safe_indexing(a, test)) for a in arrays))文件“C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\sklearn\model_selection_split.py”,第 2059 行,在 safe_indexing(a, test)) 中,用于数组中的 a)) 文件"C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\sklearn\utils__init__.py", line 162, in safe_indexing return X[indices] File "C:\Users\Admin\ AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\ops\array_ops。py”,第 524 行,在 _slice_helper 名称=名称中)文件“C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\ops\array_ops.py”,第 690 行,在 strided_sliceshrink_axis_mask=shrink_axis_mask) 文件“C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\ops\gen_array_ops.py”,第 10187 行,在 strided_slice name=名称)文件“C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\framework\op_def_library.py”,第 787 行,在 _apply_op_helper op_def=op_def 中)文件“C :\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\util\deprecation.py", line 454, in new_func return func(*args, **kwargs) File " C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\framework\ops.py”,第 3155 行,在 create_op op_def=op_def 中)文件“C:\Users\Admin\ AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\framework\ops.py”,第 1731 行,在init control_input_ops) 文件“C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\framework\ops.py”,第 1579 行,在 _create_c_op 中引发 ValueError(str(e )) ValueError: Shape must be rank 1 but is rank 2 for 'strided_slice' (op: 'StridedSlice') with input shape: [1000], [1,700], [1,700], [1].
如果我使用 **2 而不是 tf.square,代码也无法编译,错误:ERROR:tensorflow:Model diverged with loss = NaN。回溯(最近一次调用最后一次):
文件“C:/Users/Admin/Documents/PycharmProjects/TF_API_2/api.py”,第 35 行,在 estimator.train(input_fn=input_function, steps=1000) 文件“C:\Users\Admin\AppData\Local\Programs \Python\Python36\lib\site-packages\tensorflow\python\estimator\estimator.py”,第 376 行,在 train loss = self._train_model(input_fn, hooks, Saving_listeners) 文件“C:\Users\Admin\AppData\ Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\estimator\estimator.py”,第 1145 行,在 _train_model 中返回 self._train_model_default(input_fn, hooks, Saving_listeners) 文件“C:\Users\Admin\ AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\estimator\estimator.py”,第 1173 行,在 _train_model_default Saving_listeners 中)文件“C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\estimator\estimator.py”,第 1451 行,在 _train_with_estimator_spec _,loss = mon_sess.run([estimator_spec.train_op, estimator_spec.loss]) 文件“C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\training\monitored_session.py”,第 583 行,运行 run_metadata=run_metadata)文件“C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\training\monitored_session.py”,第 1059 行,运行 run_metadata=run_metadata) 文件“C:\ Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\training\monitored_session.py”,第 1150 行,在运行 raise Six.reraise(*original_exc_info) 文件“C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\six.py”,第 693 行,在重新提高值文件“C:\Users\Admin\AppData\Local\Programs\Python\ Python36\lib\site-packages\tensorflow\python\training\monitored_session.py”,第 1135 行,运行中返回 self._sess.run(*args, **kwargs) 文件“C:\Users\Admin\AppData\Local \Programs\Python\Python36\lib\site-packages\tensorflow\python\training\monitored_session.py", line 1215, in run run_metadata=run_metadata)) 文件 "C:\Users\Admin\AppData\Local\Programs\Python \Python36\lib\site-packages\tensorflow\python\training\basic_session_run_hooks.py”,第 635 行,在 after_run 中引发 NanLossDuringTrainingError tensorflow.python.training.basic_session_run_hooks.NanLossDuringTrainingError:训练期间的 NaN 损失。在重新提高值文件“C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\training\monitored_session.py”,第 1135 行,在运行中返回 self._sess。 run(*args, **kwargs) File "C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\training\monitored_session.py", line 1215, in run run_metadata=run_metadata)) 文件“C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\training\basic_session_run_hooks.py”,第 635 行,在 after_run 中引发 NanLossDuringTrainingError tensorflow。 python.training.basic_session_run_hooks.NanLossDuringTrainingError:训练期间的 NaN 损失。在重新提高值文件“C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\training\monitored_session.py”,第 1135 行,在运行中返回 self._sess。 run(*args, **kwargs) File "C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\training\monitored_session.py", line 1215, in run run_metadata=run_metadata)) 文件“C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\training\basic_session_run_hooks.py”,第 635 行,在 after_run 中引发 NanLossDuringTrainingError tensorflow。 python.training.basic_session_run_hooks.NanLossDuringTrainingError:训练期间的 NaN 损失。在运行中返回 self._sess.run(*args, **kwargs) File "C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\training\monitored_session.py ",第 1215 行,运行 run_metadata=run_metadata)) 文件“C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\training\basic_session_run_hooks.py”,第 635 行, 在 after_run 中引发 NanLossDuringTrainingError tensorflow.python.training.basic_session_run_hooks.NanLossDuringTrainingError: NaN loss during training。在运行中返回 self._sess.run(*args, **kwargs) File "C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\training\monitored_session.py ",第 1215 行,运行 run_metadata=run_metadata)) 文件“C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\training\basic_session_run_hooks.py”,第 635 行, 在 after_run 中引发 NanLossDuringTrainingError tensorflow.python.training.basic_session_run_hooks.NanLossDuringTrainingError: NaN loss during training。\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\training\basic_session_run_hooks.py”,第 635 行,在 after_run 中引发 NanLossDuringTrainingError tensorflow.python.training.basic_session_run_hooks.TanLossDuringNanLossDuring训练过程中的损失。\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\training\basic_session_run_hooks.py”,第 635 行,在 after_run 中引发 NanLossDuringTrainingError tensorflow.python.training.basic_session_run_hooks.TanLossDuringNanLossDuring训练过程中的损失。
这一行 [ y_true = tf.square(x_data)
]有什么问题?
这里有两个不同的问题:
#1,不要将 numpy 和 tensorflow 操作混合在一起。除非您在急切执行模式下评估您的图形,否则它们几乎永远不会一起使用。
#2,当您的网络在几次迭代后产生 NaN 时,这通常是您遇到数字上溢/下溢的好兆头。在这种情况下,罪魁祸首是x_data
输入过大。要么对其进行标准化(0-1),要么减少生成数据的范围(怎么样np.random.randint
?)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句