調試錯誤:ValueError: Protocol message Feature has no "feature" field ——將MNIST數據轉換TFRecord程序報錯經歷

在學習《Tensorflow:實戰Google深度學習框架》,分享一下自己的出錯經歷。

一、TFRecord 文件中的數據都是通過 tf.train.Example Protocol Buffer 的格式存儲的。

在7.1.2 樣例程序,如下:

# -*- coding: utf-8 -*-
import tensorflow as tf
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('D:\\Program Files\\Anaconda3\\envs\\tensorflow\\mnist\\input_data\\',one_hot=True)


def _int64_feature(value):       # 生成整數型的屬性
    return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))


def _bytes_feature(value):       # 生成字符串型的屬性
    return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))


images = mnist.train.images
labels = mnist.train.labels   # 訓練數據所對應的正確答案,可作爲一個屬性保存在TFRecord中
pixels = images.shape[1]
num_examples_train = mnist.train.num_examples  # 訓練數據的圖像分辨率,可以作爲Example中的一個屬性


filename = "D:/Python/TF/AllDataProcess/data/output.tfrecords"  # 輸出TFRecord文件的地址
writer = tf.python_io.TFRecordWriter(filename) # 通過writer來寫TFRecord文件
for index in range(num_examples_train):
    image_raw = images[index].tostring() # 將圖像矩陣轉化爲一個字符串
    example = tf.train.Example(
        features=tf.train.Features(
            feature={
                'pixels': _int64_feature(pixels),
                'label': _int64_feature(np.argmax(labels[index])),
                'image_raw': _bytes_feature(image_raw)
            }
        )
    )
    writer.write(example.SerializeToString())  # 將一個Example寫入TFRecord文件
writer.close()

很經典的代碼,沒什麼問題。

      可是,如果你把

example = tf.train.Example(
    features=tf.train.Features(

這一句後面的Features 的 s 漏掉了的話,就會報這樣的錯誤:


注:我的編譯器是spyder。

二、Tips

1、學習一樣新內容,常常用到博客。當你複製一篇經典代碼,卻調試出錯時,不妨找兩個類似的博客運行一下試試。有些小錯還是挺難注意到的。

2、發佈博客的兄弟們,對自己的博客還是認真運行過後再上傳吧,咱也不說啥大道理,別讓後來的小白們淚奔的去調試錯誤!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章