在學習《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、發佈博客的兄弟們,對自己的博客還是認真運行過後再上傳吧,咱也不說啥大道理,別讓後來的小白們淚奔的去調試錯誤!