今天想要列出我之前遇到的tensorflow有關的錯誤。
原因:
有model.ckpt-{step_number}
檔案,
卻沒有名為checkpoint
檔案
解法:
建立checkpoint
檔
touch checkpoint # 創立checkpoint檔
vim checkpoint # 編輯checkpoint檔
寫入下面兩行
model_checkpoint_path: "model.ckpt-{step}"
all_model_checkpoint_paths: "model.ckpt-{step}"
要用的是哪個checkpoint檔案就把{step}替換掉
例如:要載入的是model.ckpt-803000,就替換成
model_checkpoint_path: "model.ckpt-803000"
all_model_checkpoint_paths: "model.ckpt-803000"
也有可能給錯checkpoint在的資料夾名稱,用print確認給的路徑是對的。
validation_split
argument is not supported when input x
is a dataset or a dataset iterator. Received: x=<tensorflow.python.data.ops.iterator_ops.Iterator object at 0x12e99cb00>, validation_split=0.200000原因:
在使用tf.keras API時,其訓練method的validation_split
目前不支援tf.data型態的資料集。
解法:
自製一個valid dataset。
原因:
keras model.fit不支援tf.data.Dataset轉成iterator的模式,他接受dataset,不要make_one_shot_iterator()
解法:
# last dataset map function return d, l, f, g
可以支援
iterator = dataset.make_one_shot_iterator()
data, label, filename, grade = iterator.get_next()
class_weight
not supported for 3+ dimensional targets.解法:
要改用sample_weight,也就是說,label是pixel等級的,必須要把得到label shape,reshape成1維,再一一對不同label加入weight。
batch_size
must be None.解法:
擇一使用。
原因:
在建立model時有指名參數名稱。
原生keras的參數名稱與tf.keras的參數名稱不同造成。
解法:
原生keras:
from keras import Model
model = Model(input=, output=)
tf.keras:
from tensorflow.keras import Model
model = Model(inputs=, outputs=)
[[{{node ParseSingleExample/ParseSingleExample}} = ParseSingleExample[Tdense=[DT_STRING, DT_STRING, DT_STRING, DT_STRING, DT_STRING, DT_STRING], dense_keys=["image/encoded", "image/filename", "image/format", "image/grade", "image/segmentation/class/encoded", "image/segmentation/class/format"], dense_shapes=[[], [], [], [], [], []], num_sparse=0, sparse_keys=[], sparse_types=[]](arg0, ParseSingleExample/Const, ParseSingleExample/Const, ParseSingleExample/Const, ParseSingleExample/Const, ParseSingleExample/Const, ParseSingleExample/Const)]]
[[node IteratorGetNext (defined at /Users/yenciliang/_School/script/keras_estimator/keras_train_with_tfrecord/datasets/data_generater.py:79) = IteratorGetNext[output_shapes=[[?], [?]], output_types=[DT_STRING, DT_STRING], _device="/job:localhost/replica:0/task:0/device:CPU:0"](OneShotIterator)]]
原因:
可能用錯method來解析tfrecord
解法:
像是試圖用tf.data.Dataset.from_tensor_slices()來解析tfrecord,要用tf.data.TFRecordDataset()才對
資料來源:
https://www.tensorflow.org/api_docs/python/tf/data/Dataset