TensorFlow DNNClassifier代码运行异常,求修复方案
解决你的TensorFlow Estimator训练问题
嗨,看了你的代码和日志,问题很明确——你已经搭好了模型和输入数据集,但没有触发训练操作!那些INFO/WARNING只是TensorFlow初始化模型配置的正常输出,因为你没调用训练方法,程序自然就停在这了,没有后续的训练过程。
下面是具体的修复步骤:
- 添加训练调用:创建完
classifier和输入数据集后,必须调用classifier.train()方法来启动训练,同时通过steps参数指定训练步数(不然模型会无限重复训练)。 - 可选:指定模型目录:你看到的临时目录警告,是因为没给模型指定保存路径,在创建
DNNClassifier时加上model_dir参数就能解决这个问题。
修改后的完整代码如下:
import tensorflow as tf def train_input_fn(features, labels, batch_size): """An input function for training""" # Convert the inputs to a Dataset. dataset = tf.data.Dataset.from_tensor_slices((dict(features), labels)) # Shuffle, repeat, and batch the examples. return dataset.shuffle(1000).repeat().batch(batch_size) # Feature columns describe how to use the input. my_feature_columns = [] for key in landmark_features.keys(): my_feature_columns.append(tf.feature_column.numeric_column(key=key)) # Build a DNN with 2 hidden layers and 10 nodes in each hidden layer. # 这里添加model_dir参数,自定义模型保存路径,避免临时目录警告 classifier = tf.estimator.DNNClassifier( feature_columns=my_feature_columns, hidden_units=[10, 10], n_classes=10, model_dir="./my_emotion_model" # 指定你自己的模型保存目录 ) # 调用train方法启动训练,这里指定训练1000步,你可以根据需求调整 classifier.train( input_fn=lambda: train_input_fn(landmark_features, emotion_labels, batch_size=1375), steps=1000 )
几点补充说明:
- 用
lambda包裹输入函数是因为classifier.train()要求input_fn是无参的,这样可以把参数传递进去。 - 如果想控制训练的轮数,也可以在
dataset.repeat()里指定次数(比如repeat(10)表示训练10轮),同时配合steps参数一起使用。 - 运行修改后的代码后,你就能看到训练过程中的损失、准确率等日志输出了。
内容的提问来源于stack exchange,提问作者Dotun Akinnola
相关产品推荐
相关产品推荐

