使用labelme给矿物岩石数据集贴标签
【此文中后段有尝试利用“岩石矿物VS背景” 的手动标注的数据集标签作为训练数据去跑模型,来预测其他未进行手动标注的数据集,但是效果特别特别差,所以只需要参考此文的labelme手动标注岩石矿物数据集的过程,后面如果有训练成功的模型且预测效果还不错会发表出来】
1.1整理原始矿物岩石数据集
1.打开各文件夹内的岩石矿物数据集
在pycharm:检查所有Images是不是RGB三通道(不能是RGBA通道)
(1)先处理为RGB三通道,不然后续labelme标注时会报错


(2)处理为RGB三通道的代码如下
点击查看代码
from PIL import Image
import os
# **************** 您的文件夹路径 ****************
# 注意:在Python字符串中,反斜杠 \ 是转义字符。
# 最好使用原始字符串 r"..." 或将 \ 替换为 / 或 \\
input_folder = r"F:\Dataset\Labelme_images"
# **********************************************
# 确保文件夹存在
if not os.path.isdir(input_folder):
print(f"错误:文件夹路径不存在或不是目录:{input_folder}")
else:
print(f"开始处理文件夹:{input_folder}")
for filename in os.listdir(input_folder):
# 仅处理常见图像文件类型
if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.tiff')):
input_path = os.path.join(input_folder, filename)
# 跳过目录
if os.path.isdir(input_path):
continue
try:
img = Image.open(input_path)
# 检查图像是否为 RGBA 模式
if img.mode == 'RGBA':
print(f"正在转换 {filename}...")
# 1. 创建一个白色背景 (R:255, G:255, B:255) 的 RGB 图像
rgb_img = Image.new("RGB", img.size, (255, 255, 255))
# 2. 将原图粘贴到新的 RGB 图像上,使用 Alpha 通道作为蒙版
# 透明部分会与白色背景混合
# img.split()[3] 获取 Alpha (A) 通道
rgb_img.paste(img, mask=img.split()[3])
# 3. 覆盖原始文件
rgb_img.save(input_path)
print(f" -> 转换完成,已保存为 RGB 模式。")
# 检查是否是其他非 RGB/非 RGBA 模式 (如 L=灰度, P=调色板等)
elif img.mode != 'RGB':
print(f"正在转换 {filename} (当前模式: {img.mode})...")
# 转换为 RGB 模式
rgb_img = img.convert('RGB')
rgb_img.save(input_path)
print(f" -> 转换完成,已保存为 RGB 模式。")
else:
# 已经是 RGB 模式,跳过
print(f" {filename} 已是 RGB 模式,跳过。")
except Exception as e:
print(f" -> 处理 {filename} 时发生错误: {e}")
print("--- 所有文件处理完毕 ---")
(3)输出结果如下:
点击查看代码
D:\anaconda3\envs\labelme\python.exe D:/DeepLearning/Procee_Dataset/ImageType_Convert.py
开始处理文件夹:F:\Label_Dataset\7d489_main\limestone\Images
000001.jpg 已是 RGB 模式,跳过。
000002.jpg 已是 RGB 模式,跳过。
......
正在转换 000273.jpg...
-> 转换完成,已保存为 RGB 模式。
000274.jpg 已是 RGB 模式,跳过。
......
000282.jpg 已是 RGB 模式,跳过。
正在转换 000283.jpg...
-> 转换完成,已保存为 RGB 模式。
000284.jpg 已是 RGB 模式,跳过。
000285.jpg 已是 RGB 模式,跳过。
正在转换 000286.jpg...
-> 转换完成,已保存为 RGB 模式。
000287.jpg 已是 RGB 模式,跳过。
......
000898.jpg 已是 RGB 模式,跳过。
--- 所有文件处理完毕 ---
进程已结束,退出代码0

(4)处理重复照片
计算图像的感知哈希(phash),对光照/背景变化鲁棒
①手动删除
点击查看代码
import os
import sys
from pathlib import Path
from PIL import Image
import imagehash
import argparse
def get_perceptual_hash(image_path, hash_size=8):
try:
with Image.open(image_path) as img:
if img.mode != 'L':
img = img.convert('L')
h = imagehash.phash(img, hash_size=hash_size)
return str(h)
except Exception as e:
print(f"⚠️ 无法处理 {image_path}: {e}")
return None
def find_and_delete_similar_images(folder_path, hash_size=8, max_distance=5, delete=False):
image_exts = {'.jpg', '.jpeg', '.png', '.bmp', '.gif', '.webp', '.tiff', '.tif', '.jfif'}
image_files = [
os.path.join(folder_path, f)
for f in os.listdir(folder_path)
if os.path.isfile(os.path.join(folder_path, f)) and Path(f).suffix.lower() in image_exts
]
if not image_files:
print("未找到任何图片文件。")
return
print(f"🔍 扫描到 {len(image_files)} 张图片,正在计算感知哈希...")
hash_list = []
valid_files = []
for f in image_files:
h_str = get_perceptual_hash(f, hash_size=hash_size)
if h_str:
hash_list.append(h_str)
valid_files.append(f)
if not hash_list:
print("❌ 无有效图像可处理。")
return
print(f"✅ 成功计算 {len(hash_list)} 张图像的感知哈希。")
used = [False] * len(valid_files)
files_to_delete = []
for i in range(len(valid_files)):
if used[i]:
continue
group = [valid_files[i]]
used[i] = True
h1 = imagehash.hex_to_hash(hash_list[i])
for j in range(i + 1, len(valid_files)):
if used[j]:
continue
h2 = imagehash.hex_to_hash(hash_list[j])
if (h1 - h2) <= max_distance:
group.append(valid_files[j])
used[j] = True
# 保留 group[0],其余标记为删除
if len(group) > 1:
files_to_delete.extend(group[1:])
if not files_to_delete:
print("✅ 未发现冗余图像,无需删除。")
return
print(f"🧹 发现 {len(files_to_delete)} 张冗余图像,准备删除...")
if delete:
for f in files_to_delete:
try:
os.remove(f)
print(f"🗑️ 已删除: {f}")
except Exception as e:
print(f"❌ 删除失败 {f}: {e}")
print(f"\n✅ 自动删除完成!共删除 {len(files_to_delete)} 张图像。")
else:
print("(模拟模式)以下是将被删除的文件:")
for f in files_to_delete:
print(f" ❌ {f}")
print("\n💡 如需真实删除,请添加 `--delete` 参数运行。")
# ===== 主程序 =====
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="自动检测并删除视觉相似图像(保留每组第一张)")
parser.add_argument("folder", nargs="?", help="图像文件夹路径")
parser.add_argument("--delete", action="store_true", help="启用真实删除(否则仅模拟)")
parser.add_argument("--hash-size", type=int, default=8)
parser.add_argument("--max-distance", type=int, default=5)
args = parser.parse_args()
try:
import imagehash
except ImportError:
print("❌ 请先安装依赖:pip install imagehash")
sys.exit(1)
folder = args.folder or input("请输入图片文件夹的绝对路径: ").strip()
if not os.path.isdir(folder):
print("❌ 无效的文件夹路径")
sys.exit(1)
print(f"📁 处理文件夹: {folder}")
print("-" * 50)
find_and_delete_similar_images(
folder,
hash_size=args.hash_size,
max_distance=args.max_distance,
delete=args.delete
)
②自动删除
点击查看代码
import os
import sys
from pathlib import Path
from PIL import Image
import imagehash
def get_perceptual_hash(image_path, hash_size=8):
try:
with Image.open(image_path) as img:
if img.mode != 'L':
img = img.convert('L')
h = imagehash.phash(img, hash_size=hash_size)
return str(h)
except Exception as e:
return None
def auto_delete_similar_images(folder_path, hash_size=8, max_distance=5):
# 支持 .jfif(你提到的格式)
image_exts = {'.jpg', '.jpeg', '.png', '.bmp', '.gif', '.webp', '.tiff', '.tif', '.jfif'}
image_files = [
os.path.join(folder_path, f)
for f in os.listdir(folder_path)
if os.path.isfile(os.path.join(folder_path, f)) and Path(f).suffix.lower() in image_exts
]
if not image_files:
print("未找到任何支持的图像文件。")
return
print(f"🔍 扫描到 {len(image_files)} 张图像,正在计算感知哈希...")
hash_list = []
valid_files = []
for f in image_files:
h_str = get_perceptual_hash(f, hash_size=hash_size)
if h_str is not None:
hash_list.append(h_str)
valid_files.append(f)
print(f"✅ 成功处理 {len(valid_files)} 张有效图像。")
used = [False] * len(valid_files)
files_to_delete = []
for i in range(len(valid_files)):
if used[i]:
continue
h1 = imagehash.hex_to_hash(hash_list[i])
group = [valid_files[i]]
used[i] = True
for j in range(i + 1, len(valid_files)):
if used[j]:
continue
h2 = imagehash.hex_to_hash(hash_list[j])
if (h1 - h2) <= max_distance:
group.append(valid_files[j])
used[j] = True
if len(group) > 1:
files_to_delete.extend(group[1:]) # 保留 group[0],删其余
if not files_to_delete:
print("✅ 未发现重复图像。")
return
print(f"🗑️ 发现 {len(files_to_delete)} 张重复图像,正在删除...")
for f in files_to_delete:
try:
os.remove(f)
except Exception as e:
print(f"❌ 删除失败: {f} - {e}")
print(f"✅ 自动去重完成!共删除 {len(files_to_delete)} 张图像。")
# ===== 主程序 =====
if __name__ == "__main__":
try:
import imagehash
except ImportError:
print("❌ 请先运行: pip install imagehash")
sys.exit(1)
if len(sys.argv) > 1:
folder = sys.argv[1]
else:
folder = input("请输入图像文件夹路径: ").strip()
if not os.path.isdir(folder):
print("❌ 路径无效。")
sys.exit(1)
auto_delete_similar_images(folder, hash_size=8, max_distance=5)
1.2在labelme里面标注json文件
1.点击“打开目录”,这样就能同时标注一整个文件夹下的矿物岩石图像
应提前把所有图像放到同一个文件夹中,再点击“打开目录”,用labelme打开这个文件夹标注
2.点击'AI多边形',手动点击一两下矿物所在区域,labelme就能自动识别出矿物
(1)通过点选想要标注的物体,让AI自动标注,双击,取一个“标签”名,然后Ctrl+S,保存标注的label格式的json文件;如果要切换上一张图像,点击键盘的“D”

【注:在标注过程中,不要任意切换文件夹,否则imagepath会出现问题】
(2)遇到不是单独一个矿物岩石,需要多次点击此岩石并命名为同一个标签名
标注完同一种的多个矿物后,再Ctrl+S保存为json文件

3.打开json文件的imagepath
Labelme标注的json文件最后imagePath图像路径,只能是图像名字本身,不能有其它的路径和符号(例如../、\之类的)
】
1.3在pycharm里面批量将json文件转成mask文件(png格式)
1.先自动改名字,再转为mask文件【提前将json和要改名的jpg文件都放在Labelme_json文件夹里面】
(1)先把Labelme_json文件夹里面的jpg文件例如000459.jpg的所有文件自动转换为类似于dolomite_000459.json命令形式的dolomite_000459.jpg
(2)并在Labelme_mask文件夹里面生成类似于dolomite_000459.png的文件
2.代码如下
点击查看代码
import os
import json
import numpy as np
from PIL import Image
from labelme import utils
import glob
# ====== 路径配置 ======
json_dir = r"G:\Label_Dataset\Dataset\Granite\Labelme_jsons"
output_mask_dir = r"G:\Label_Dataset\Dataset\Granite\Labelme_mask"
# 创建掩膜输出目录(如果不存在)
os.makedirs(output_mask_dir, exist_ok=True)
# 遍历所有 JSON 文件
json_files = glob.glob(os.path.join(json_dir, "*.json"))
# ✅ 修正:添加点号,支持 .webp
img_extensions = ['.jpg', '.jpeg', '.png', '.bmp', '.webp','.gif']
for json_path in json_files:
json_filename = os.path.basename(json_path)
print(f"Processing: {json_filename}")
try:
# 使用 JSON 文件名(不含扩展名)作为输出基础名
output_base = os.path.splitext(json_filename)[0]
# 查找对应图像文件
img_path = None
for ext in img_extensions:
temp_path = os.path.join(json_dir, output_base + ext)
if os.path.exists(temp_path):
img_path = temp_path
break
if not img_path:
raise FileNotFoundError(f"未找到对应图像文件(支持格式:{img_extensions})")
# 读取 JSON
with open(json_path, 'r', encoding='utf-8') as f:
data = json.load(f)
# 打开图像以获取尺寸(不保存)
with Image.open(img_path) as img:
img_width, img_height = img.size
# 构建标签映射
label_name_to_value = {"__background__": 0}
for shape in data["shapes"]:
label = shape["label"]
if label not in label_name_to_value:
label_name_to_value[label] = len(label_name_to_value)
# 生成掩膜
lbl, _ = utils.shapes_to_label(
img_shape=(img_height, img_width),
shapes=data["shapes"],
label_name_to_value=label_name_to_value,
)
# ✅ 仅保存掩膜(PNG)
mask_output_path = os.path.join(output_mask_dir, output_base + ".png")
# 转为 0-255(可选,便于可视化;若用于训练,也可保留 0/1)
lbl = lbl * 255
Image.fromarray(lbl.astype(np.uint8), mode='L').save(mask_output_path)
print(f"✅ 生成掩膜: {output_base}.png")
except Exception as e:
print(f"❌ 错误: {json_filename} -> {e}")
print("\n🎉 掩膜生成完成!仅输出 PNG 掩膜文件,文件名与 JSON 一致。")
1.4将mask文件作为“掩码”,直接从原始JPG中提取矿物部分,生成新JPG
1.第一次”掩码“结果:图像全白
【原因:我在labelme标注的json文件转换生成的mask是0-1范围,而非0-255】
labelme的utils.shapes_to_label()默认生成0-1范围的mask(背景=0,矿物=1),不是标准的0-255二值图。
2.将mask范围设为0-255
代码如下:
点击查看代码
from PIL import Image
import numpy as np
import os
# 设置目录路径
original_dir = r"G:\Label_Dataset\Dataset\Granite\Labelme_images"
mask_dir = r"G:\Label_Dataset\Dataset\Granite\Labelme_mask"
output_dir = r"G:\Label_Dataset\Dataset\Granite\Images"
os.makedirs(output_dir, exist_ok=True)
# 支持的原始图像格式(包括 webp)
supported_extensions = ('.jpg', '.jpeg', '.png', '.bmp', '.webp','.gif')
for filename in os.listdir(original_dir):
if filename.lower().endswith(supported_extensions):
# 1. 获取基础名(不含扩展名),用于匹配 mask
base_name, ext = os.path.splitext(filename)
mask_path = os.path.join(mask_dir, base_name + '.png')
# 2. 检查 mask 是否存在
if not os.path.exists(mask_path):
print(f"⚠️ 警告: 找不到对应的 mask 文件: {mask_path}")
continue
# 3. 读取原始图像和 mask
img = Image.open(os.path.join(original_dir, filename)).convert('RGB')
mask = Image.open(mask_path).convert('L')
# 4. 生成二值掩码(>128 视为前景/矿物)
mask_np = np.array(mask)
mineral_mask = mask_np > 128 # shape: (H, W), bool
# 5. 创建白底图像,保留矿物区域
img_np = np.array(img)
output_img = np.full_like(img_np, 255) # 全白背景
output_img[mineral_mask] = img_np[mineral_mask]
# 6. 输出为 JPG(无论输入是 webp 还是 jpg)
output_filename = base_name + '.jpg'
output_path = os.path.join(output_dir, output_filename)
Image.fromarray(output_img).save(output_path, "JPEG")
print(f"✅ 已处理: {filename} → {output_filename}")
1.5划分训练集和测试集(20%测试集,80%训练集)
1.重命名文件:
img_dir:是原始图像
ann_dir:是json转换成的mask的png文件
2.删除文件:
原始json文件删掉
3.提前准备:
将Dolomite、Limestone、Shale三个文件夹下的labelme_images统一放到img_dir文件夹里,将labelme_mask的png文件统一放到ann_dir文件夹下,然后在jupyter notebook打开这个目录: "D:\DeepLearning\Learn_SAM\Label2Everything_labelme2mask\Dataset_DolomiteLimestoneShale"
4.划分训练
打开"D:\DeepLearning\Learn_SAM\Label2Everything_labelme2mask\【C】划分训练-测试集.ipynb"
通过在jupyter notebook里运行该代码,实现80%训练集和20%测试集的划分

5.实现效果如下:


完全可以用这184张 dolomite 图像训练的模型,去为其他几千张不同岩性(limestone, mudstone, sandstone, shale 等)图像生成 mask!
1.6训练模型
1.准备数据:
我的实际数据准备如下:
Dataset_DolomiteLimestoneShale/
├── train/
│ ├── img_dir/ # Dolomite、Limestone和Shale训练图像
│ └ann_dir/ # 对应mask
├── val/
│ ├── img_dir/ # Dolomite、Limestone和Shale验证图像
│ └ann_dir/ # 对应mask
└── Images/ # Mudstone的202张待预测图像
2.训练 U-Net 模型(推荐使用 Keras + TensorFlow)
(1)在Google Colab训练模型,
代码如下:
点击查看代码
import os
import numpy as np
import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from PIL import Image
from google.colab import files
# 上传 train/img_dir 和 train/ann_dir 文件夹(压缩为 .zip)
uploaded = files.upload()
# 解压(假设您上传的是 train.zip 和 val.zip)
!unzip -q train.zip -d /content/
!unzip -q val.zip -d /content/
!unzip -q Images.zip -d /content/
# 查看内容
!ls -R /content/
# 修改为Colab路径
train_img_dir = "/content/train/img_dir"
train_mask_dir = "/content/train/ann_dir"
val_img_dir = "/content/val/img_dir"
val_mask_dir = "/content/val/ann_dir"
new_img_dir = "/content/Images"
output_mask_dir = "/content/Labelme_mask" # 输出目录
os.makedirs(output_mask_dir, exist_ok=True)
def load_image_and_mask(img_path, mask_path, target_size=(256, 256)):
try:
# 加载图像
img = tf.io.read_file(img_path)
img = tf.image.decode_image(img, channels=3, expand_animations=False) # 关闭动画支持
if img.shape[0] == 0 or img.shape[1] == 0: # 检查是否为空图像
raise ValueError(f"图像尺寸为0: {img_path}")
img = tf.image.resize(img, target_size)
img = tf.cast(img, tf.float32) / 255.0
# 加载 mask
mask = tf.io.read_file(mask_path)
mask = tf.image.decode_png(mask, channels=1)
if mask.shape[0] == 0 or mask.shape[1] == 0:
raise ValueError(f"Mask 尺寸为0: {mask_path}")
mask = tf.image.resize(mask, target_size)
mask = tf.cast(mask, tf.float32) / 255.0
return img, mask
except Exception as e:
print(f"❌ 加载失败: {img_path} 或 {mask_path}")
print(f" 错误信息: {str(e)}")
# 返回一个占位符(避免中断训练),实际中建议跳过或修复该文件
dummy_img = tf.zeros((target_size[0], target_size[1], 3), dtype=tf.float32)
dummy_mask = tf.zeros((target_size[0], target_size[1], 1), dtype=tf.float32)
return dummy_img, dummy_mask
def create_dataset(image_dir, mask_dir, batch_size=8):
image_files = [f for f in os.listdir(image_dir) if f.lower().endswith(('.jpg', '.jpeg', '.png'))]
mask_files = [f for f in os.listdir(mask_dir) if f.lower().endswith('.png')]
# 按文件名排序
image_files.sort()
mask_files.sort()
# 打印前几个文件名,确认是否匹配
print("📊 图像文件 (前5个):", image_files[:5])
print("📊 Mask 文件 (前5个):", mask_files[:5])
# 确保数量一致
if len(image_files) != len(mask_files):
raise ValueError(f"图像和 mask 数量不匹配:{len(image_files)} vs {len(mask_files)}")
# 检查文件名是否能一一对应(忽略后缀)
image_basenames = [os.path.splitext(f)[0] for f in image_files]
mask_basenames = [os.path.splitext(f)[0] for f in mask_files]
# 匹配相同 base name 的图像和 mask
matched_pairs = []
for img_name in image_basenames:
if img_name in mask_basenames:
img_idx = image_basenames.index(img_name)
mask_idx = mask_basenames.index(img_name)
matched_pairs.append((image_files[img_idx], mask_files[mask_idx]))
if len(matched_pairs) == 0:
raise ValueError("没有找到任何匹配的图像和 mask 对!请检查文件名是否一致。")
image_paths = [os.path.join(image_dir, p[0]) for p in matched_pairs]
mask_paths = [os.path.join(mask_dir, p[1]) for p in matched_pairs]
dataset = tf.data.Dataset.from_tensor_slices((image_paths, mask_paths))
dataset = dataset.map(lambda x, y: load_image_and_mask(x, y), num_parallel_calls=tf.data.AUTOTUNE)
dataset = dataset.batch(batch_size).prefetch(tf.data.AUTOTUNE)
return dataset
def unet_model(input_size=(256, 256, 3)):
inputs = layers.Input(input_size)
# Encoder
c1 = layers.Conv2D(16, 3, activation='relu', padding='same')(inputs)
c1 = layers.Conv2D(16, 3, activation='relu', padding='same')(c1)
p1 = layers.MaxPooling2D()(c1)
c2 = layers.Conv2D(32, 3, activation='relu', padding='same')(p1)
c2 = layers.Conv2D(32, 3, activation='relu', padding='same')(c2)
p2 = layers.MaxPooling2D()(c2)
c3 = layers.Conv2D(64, 3, activation='relu', padding='same')(p2)
c3 = layers.Conv2D(64, 3, activation='relu', padding='same')(c3)
p3 = layers.MaxPooling2D()(c3)
c4 = layers.Conv2D(128, 3, activation='relu', padding='same')(p3)
c4 = layers.Conv2D(128, 3, activation='relu', padding='same')(c4)
p4 = layers.MaxPooling2D()(c4)
c5 = layers.Conv2D(256, 3, activation='relu', padding='same')(p4)
c5 = layers.Conv2D(256, 3, activation='relu', padding='same')(c5)
# Decoder
u6 = layers.Conv2DTranspose(128, 2, strides=2, padding='same')(c5)
u6 = layers.concatenate([u6, c4])
c6 = layers.Conv2D(128, 3, activation='relu', padding='same')(u6)
c6 = layers.Conv2D(128, 3, activation='relu', padding='same')(c6)
u7 = layers.Conv2DTranspose(64, 2, strides=2, padding='same')(c6)
u7 = layers.concatenate([u7, c3])
c7 = layers.Conv2D(64, 3, activation='relu', padding='same')(u7)
c7 = layers.Conv2D(64, 3, activation='relu', padding='same')(c7)
u8 = layers.Conv2DTranspose(32, 2, strides=2, padding='same')(c7)
u8 = layers.concatenate([u8, c2])
c8 = layers.Conv2D(32, 3, activation='relu', padding='same')(u8)
c8 = layers.Conv2D(32, 3, activation='relu', padding='same')(c8)
u9 = layers.Conv2DTranspose(16, 2, strides=2, padding='same')(c8)
u9 = layers.concatenate([u9, c1])
c9 = layers.Conv2D(16, 3, activation='relu', padding='same')(u9)
c9 = layers.Conv2D(16, 3, activation='relu', padding='same')(c9)
outputs = layers.Conv2D(1, 1, activation='sigmoid')(c9)
model = models.Model(inputs=[inputs], outputs=[outputs])
return model
train_dataset = create_dataset(train_img_dir, train_mask_dir, batch_size=8)
val_dataset = create_dataset(val_img_dir, val_mask_dir, batch_size=8)
model = unet_model()
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
print("🚀 开始训练...")
history = model.fit(
train_dataset,
validation_data=val_dataset,
epochs=50,
verbose=1
)
print("✅ 训练完成!")
print("🔮 开始预测新图像(使用 mudstone_ 前缀 + 原始编号)...")
# 获取所有新图像路径(支持 jpg/jpeg/png)
new_image_paths = sorted([
os.path.join(new_img_dir, f)
for f in os.listdir(new_img_dir)
if f.lower().endswith(('.jpg', '.jpeg', '.png'))
])
print(f"📦 共找到 {len(new_image_paths)} 张图像待预测")
for img_path in new_image_paths:
try:
# 加载图像
if img_path.lower().endswith('.png'):
img = tf.io.read_file(img_path)
img = tf.image.decode_png(img, channels=3)
else:
img = tf.io.read_file(img_path)
img = tf.image.decode_jpeg(img, channels=3)
img = tf.image.resize(img, (256, 256))
img = tf.expand_dims(img, axis=0)
img = tf.cast(img, tf.float32) / 255.0
# 预测
pred_mask = model.predict(img, verbose=0)[0]
pred_mask = (pred_mask > 0.5).astype(np.uint8) * 255
# ✅ 提取原始文件名中的数字部分(如 limestone_000456.jpg → 000456)
base_name = os.path.basename(img_path) # 如 "limestone_000456.jpg"
if '_' in base_name:
# 按下划线分割,取最后一部分(数字+扩展名)
number_with_ext = base_name.split('_')[-1]
# 去掉扩展名
number_part = os.path.splitext(number_with_ext)[0]
else:
# 如果没有下划线,用整个文件名去掉扩展名
number_part = os.path.splitext(base_name)[0]
# ✅ 生成新文件名:mudstone_000456.png
new_mask_name = f"mudstone_{number_part}.png"
output_path = os.path.join(output_mask_dir, new_mask_name)
# 保存
Image.fromarray(pred_mask.squeeze()).save(output_path)
# 打印进度(可选)
print(f"✅ 已生成: {new_mask_name}")
except Exception as e:
print(f"❌ 预测失败: {img_path} - {e}")
print(f"✅ 所有 mask 已生成,文件名格式:mudstone_XXXXXX.png")
!zip -r mudstone_masks.zip /content/Labelme_mask/
files.download('mudstone_masks.zip')
(2)报错了
报错的根本原因
【我在 Google Colab 上运行,而代码中的 D:\ 是 Windows 本地磁盘路径,在 Colab(Linux 环境)中完全无效。】
(3)在Colab上传我的文件:
即在运行代码之前输入以下代码:
点击查看代码
from google.colab import files
# 上传 train/img_dir 和 train/ann_dir 文件夹(压缩为 .zip)
uploaded = files.upload()
# 解压(假设您上传的是 train.zip 和 val.zip)
!unzip -q train.zip -d /content/
!unzip -q val.zip -d /content/
!unzip -q Images.zip -d /content/
# 查看内容
!ls -R /content/
【提示:请先在本地将 train/, val/, Images/ 分别压缩成 .zip 文件,然后上传。】
(4)Colab会自动弹窗,让我们加载这三个压缩为Zip的文件夹

(5)修改路径为 Colab 路径:
点击查看代码
# 修改为 Colab 路径
train_img_dir = "/content/train/img_dir"
train_mask_dir = "/content/train/ann_dir"
val_img_dir = "/content/val/img_dir"
val_mask_dir = "/content/val/ann_dir"
new_img_dir = "/content/Images"
output_mask_dir = "/content/Labelme_mask" # 输出目录
os.makedirs(output_mask_dir, exist_ok=True)
(6)它的运行结果如下:
✅ 所有 202 张图像的 mask 已生成,保存在 /content/Labelme_mask
(7)如何将这 202 张 mask 下载到本地电脑?
①我们看到的路径 /content/Labelme_mask 是 Google Colab 的临时存储空间(Linux 系统)。
Colab 无法直接访问我们本地的 D:\ 磁盘。
所有生成的文件都在云端,重启 Colab 后会被清除(除非我们下载或保存到 Google Drive)。
②如何将这 202 张 mask 下载到本地电脑?
打包成 ZIP 并下载:
在 Colab 中运行以下代码,将整个 Labelme_mask 文件夹压缩并下载:
点击查看代码
!zip -r mudstone_masks.zip /content/Labelme_mask/
files.download('mudstone_masks.zip')
(8)修改1.7_2_(1)中的代码:
【上述模型的训练效果非常差,它预测的202张岩石图的mask后的图像和手动标注的岩石图标签几乎每一张都两模两样】
①在Google Colab里面修改运行这段代码,仍然是对每张图像中的岩石主体进行分割,进行岩石 vs 背景(二值分割);
②我的训练数据包括184张dolomite、339张limestone和109张shale的JPG原始图像和分别在labelme里面手动标注的mask的png图像,现在想预测202张mudstone的岩石图,要求就是对每张图像中的岩石主体进行分割(即“把岩石从背景中抠出来”);
③时图像可以不resize 到 256x256,保持原始的图像尺寸就行;
④训练模型的图片一共632张,其中80%是训练集,20%是测试集(已经在1.6_4中划分玩训练集和测试集)
3.训练 改进型U-Net 模型
(1)在Colab改用纯 U-Net 模型 + 数据增强 + 原始尺寸支持
点击查看代码
import os
import numpy as np
import tensorflow as tf
from tensorflow.keras import layers, models
from PIL import Image
from google.colab import files
# =============================
# 第1步:上传并解压数据
# =============================
print("📂 请上传 train.zip, val.zip, Images.zip")
uploaded = files.upload()
!unzip -q train.zip -d /content/
!unzip -q val.zip -d /content/
!unzip -q Images.zip -d /content/
# =============================
# 第2步:设置路径(使用您已划分好的数据)
# =============================
train_img_dir = "/content/train/img_dir"
train_mask_dir = "/content/train/ann_dir"
val_img_dir = "/content/val/img_dir"
val_mask_dir = "/content/val/ann_dir"
new_img_dir = "/content/Images"
output_mask_dir = "/content/Labelme_mask"
os.makedirs(output_mask_dir, exist_ok=True)
# =============================
# 第3步:自定义 padding/unpad 函数(保持宽高比)
# =============================
def pad_to_square(image, target_size=512):
h, w = tf.shape(image)[0], tf.shape(image)[1]
max_dim = tf.maximum(h, w)
scale = tf.cast(target_size / max_dim, tf.float32)
new_h = tf.cast(tf.cast(h, tf.float32) * scale, tf.int32)
new_w = tf.cast(tf.cast(w, tf.float32) * scale, tf.int32)
resized = tf.image.resize(image, [new_h, new_w])
padded = tf.image.resize_with_pad(resized, target_size, target_size, method='nearest')
return padded, (h, w, new_h, new_w)
def unpad_from_square(padded_mask, orig_h, orig_w, resized_h, resized_w, target_size=512):
cropped = tf.image.crop_to_bounding_box(
tf.expand_dims(padded_mask, axis=-1),
(target_size - resized_h) // 2,
(target_size - resized_w) // 2,
resized_h,
resized_w
)
orig_mask = tf.image.resize(cropped, [orig_h, orig_w], method='nearest')
return orig_mask
# =============================
# 第4步:带数据增强的加载函数
# =============================
def load_image_and_mask(img_path, mask_path, target_size=512, augment=False):
# 加载图像
img = tf.io.read_file(img_path)
img = tf.image.decode_image(img, channels=3, expand_animations=False)
mask = tf.io.read_file(mask_path)
mask = tf.image.decode_png(mask, channels=1)
# 数据增强(仅训练时使用)
if augment:
if tf.random.uniform(()) > 0.5:
img = tf.image.flip_left_right(img)
mask = tf.image.flip_left_right(mask)
if tf.random.uniform(()) > 0.5:
img = tf.image.flip_up_down(img)
mask = tf.image.flip_up_down(mask)
if tf.random.uniform(()) > 0.5:
img = tf.image.random_brightness(img, 0.2)
img = tf.image.random_contrast(img, 0.8, 1.2)
# Pad to square
img_padded, (h, w, new_h, new_w) = pad_to_square(img, target_size)
mask_padded, _ = pad_to_square(mask, target_size)
img_padded = tf.cast(img_padded, tf.float32) / 255.0
mask_padded = tf.cast(mask_padded, tf.float32) / 255.0
return img_padded, mask_padded
# =============================
# 第5步:创建数据集(训练集带增强,验证集不带)
# =============================
def create_dataset(image_dir, mask_dir, target_size=512, batch_size=4, augment=False):
image_files = [f for f in os.listdir(image_dir) if f.lower().endswith(('.jpg', '.jpeg', '.png'))]
mask_files = [f for f in os.listdir(mask_dir) if f.lower().endswith('.png')]
image_files.sort()
mask_files.sort()
image_basenames = [os.path.splitext(f)[0] for f in image_files]
mask_basenames = [os.path.splitext(f)[0] for f in mask_files]
pairs = []
for name in image_basenames:
if name in mask_basenames:
img_f = image_files[image_basenames.index(name)]
mask_f = mask_files[mask_basenames.index(name)]
pairs.append((os.path.join(image_dir, img_f), os.path.join(mask_dir, mask_f)))
def generator():
for img_path, mask_path in pairs:
img, mask = load_image_and_mask(img_path, mask_path, target_size, augment)
yield img, mask
dataset = tf.data.Dataset.from_generator(
generator,
output_signature=(
tf.TensorSpec(shape=(target_size, target_size, 3), dtype=tf.float32),
tf.TensorSpec(shape=(target_size, target_size, 1), dtype=tf.float32)
)
)
return dataset.batch(batch_size).prefetch(tf.data.AUTOTUNE)
# =============================
# 第6步:构建更深的 U-Net 模型(5层)
# =============================
def build_unet(input_size=(512, 512, 3)):
inputs = layers.Input(input_size)
# Encoder
c1 = layers.Conv2D(64, 3, activation='relu', padding='same')(inputs)
c1 = layers.Conv2D(64, 3, activation='relu', padding='same')(c1)
p1 = layers.MaxPooling2D()(c1)
c2 = layers.Conv2D(128, 3, activation='relu', padding='same')(p1)
c2 = layers.Conv2D(128, 3, activation='relu', padding='same')(c2)
p2 = layers.MaxPooling2D()(c2)
c3 = layers.Conv2D(256, 3, activation='relu', padding='same')(p2)
c3 = layers.Conv2D(256, 3, activation='relu', padding='same')(c3)
p3 = layers.MaxPooling2D()(c3)
c4 = layers.Conv2D(512, 3, activation='relu', padding='same')(p3)
c4 = layers.Conv2D(512, 3, activation='relu', padding='same')(c4)
p4 = layers.MaxPooling2D()(c4)
c5 = layers.Conv2D(1024, 3, activation='relu', padding='same')(p4)
c5 = layers.Conv2D(1024, 3, activation='relu', padding='same')(c5)
# Decoder
u6 = layers.Conv2DTranspose(512, 2, strides=2, padding='same')(c5)
u6 = layers.concatenate([u6, c4])
c6 = layers.Conv2D(512, 3, activation='relu', padding='same')(u6)
c6 = layers.Conv2D(512, 3, activation='relu', padding='same')(c6)
u7 = layers.Conv2DTranspose(256, 2, strides=2, padding='same')(c6)
u7 = layers.concatenate([u7, c3])
c7 = layers.Conv2D(256, 3, activation='relu', padding='same')(u7)
c7 = layers.Conv2D(256, 3, activation='relu', padding='same')(c7)
u8 = layers.Conv2DTranspose(128, 2, strides=2, padding='same')(c7)
u8 = layers.concatenate([u8, c2])
c8 = layers.Conv2D(128, 3, activation='relu', padding='same')(u8)
c8 = layers.Conv2D(128, 3, activation='relu', padding='same')(c8)
u9 = layers.Conv2DTranspose(64, 2, strides=2, padding='same')(c8)
u9 = layers.concatenate([u9, c1])
c9 = layers.Conv2D(64, 3, activation='relu', padding='same')(u9)
c9 = layers.Conv2D(64, 3, activation='relu', padding='same')(c9)
outputs = layers.Conv2D(1, 1, activation='sigmoid')(c9)
return models.Model(inputs=[inputs], outputs=[outputs])
# =============================
# 第7步:训练
# =============================
print("🚀 开始训练...")
# 训练集带数据增强,验证集不带
train_dataset = create_dataset(train_img_dir, train_mask_dir, target_size=512, batch_size=4, augment=True)
val_dataset = create_dataset(val_img_dir, val_mask_dir, target_size=512, batch_size=4, augment=False)
model = build_unet(input_size=(512, 512, 3))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
history = model.fit(train_dataset, validation_data=val_dataset, epochs=100, verbose=1)
print("✅ 训练完成!")
# =============================
# 第8步:预测(保持原始尺寸)
# =============================
new_image_paths = sorted([
os.path.join(new_img_dir, f)
for f in os.listdir(new_img_dir)
if f.lower().endswith(('.jpg', '.jpeg', '.png'))
])
for img_path in new_image_paths:
try:
# 加载原始图像
if img_path.lower().endswith('.png'):
img = tf.io.read_file(img_path)
img = tf.image.decode_png(img, channels=3)
else:
img = tf.io.read_file(img_path)
img = tf.image.decode_jpeg(img, channels=3)
orig_h, orig_w = img.shape[0], img.shape[1]
# Padding 到 512x512
img_padded, (h, w, new_h, new_w) = pad_to_square(img, 512)
img_input = tf.cast(img_padded, tf.float32) / 255.0
img_input = tf.expand_dims(img_input, axis=0)
# 预测
pred_mask_padded = model.predict(img_input, verbose=0)[0]
pred_mask_padded = (pred_mask_padded > 0.5).astype(tf.float32)
# 恢复到原始尺寸
pred_mask_orig = unpad_from_square(pred_mask_padded, h, w, new_h, new_w, 512)
pred_mask_orig = tf.cast(pred_mask_orig * 255, tf.uint8)
# 保存
base_name = os.path.basename(img_path)
number_part = os.path.splitext(base_name)[0]
out_path = os.path.join(output_mask_dir, f"mudstone_{number_part}.png")
Image.fromarray(pred_mask_orig.numpy().squeeze()).save(out_path)
except Exception as e:
print(f"❌ 预测失败: {img_path} - {e}")
print("✅ 预测完成!")
# 下载结果
!zip -r mudstone_masks.zip /content/Labelme_mask/
files.download('mudstone_masks.zip')
(2)我把以上代码分步在Colab里面使用GPU运行:
①运行到第7步

②第7步的运行过程中的“127”从何而来?
一共有184张dolomite、339张limestone和109张shale的JPG原始图像,
而我的训练集总图像数 ≈ 632 × 80% ≈ 505 张
每个 batch 包含 4 张图像(batch_size=4)
所以总 batch 数 ≈ 505 / 4 ≈ 126.25 → 向上取整为 127
即【127 是训练集的 batch 数量,与预测的 202 张 mudstone 图像无关!】
③运行到Epoch11的时候已经用时23分58秒
④GPU限额,CPU跑不动了
(3)改到pycharm里面运行
①代码
点击查看代码
import os
import numpy as np
import tensorflow as tf
from tensorflow.keras import layers, models
from PIL import Image
import shutil
import zipfile
# =============================
# 第1步:设置本地路径(请根据您的实际路径修改)
# =============================
base_dir = r"D:\DeepLearning\MineralDataset\Dataset_DolomiteLimestoneShale"
train_img_dir = os.path.join(base_dir, "train", "img_dir")
train_mask_dir = os.path.join(base_dir, "train", "ann_dir")
val_img_dir = os.path.join(base_dir, "val", "img_dir")
val_mask_dir = os.path.join(base_dir, "val", "ann_dir")
new_img_dir = os.path.join(base_dir, "Images")
output_mask_dir = os.path.join(base_dir, "Labelme_mask")
os.makedirs(output_mask_dir, exist_ok=True)
print("✅ 路径设置完成")
# =============================
# 第2步:padding/unpad 函数(无需修改)
# =============================
def pad_to_square(image, target_size=512):
h, w = tf.shape(image)[0], tf.shape(image)[1]
max_dim = tf.maximum(h, w)
scale = tf.cast(target_size / max_dim, tf.float32)
new_h = tf.cast(tf.cast(h, tf.float32) * scale, tf.int32)
new_w = tf.cast(tf.cast(w, tf.float32) * scale, tf.int32)
resized = tf.image.resize(image, [new_h, new_w])
padded = tf.image.resize_with_pad(resized, target_size, target_size, method='nearest')
return padded, (h, w, new_h, new_w)
def unpad_from_square(padded_mask, orig_h, orig_w, resized_h, resized_w, target_size=512):
cropped = tf.image.crop_to_bounding_box(
tf.expand_dims(padded_mask, axis=-1),
(target_size - resized_h) // 2,
(target_size - resized_w) // 2,
resized_h,
resized_w
)
orig_mask = tf.image.resize(cropped, [orig_h, orig_w], method='nearest')
return orig_mask
# =============================
# 第3步:数据加载函数(无需修改)
# =============================
def load_image_and_mask(img_path, mask_path, target_size=512, augment=False):
img = tf.io.read_file(img_path)
img = tf.image.decode_image(img, channels=3, expand_animations=False)
mask = tf.io.read_file(mask_path)
mask = tf.image.decode_png(mask, channels=1)
if augment:
if tf.random.uniform(()) > 0.5:
img = tf.image.flip_left_right(img)
mask = tf.image.flip_left_right(mask)
if tf.random.uniform(()) > 0.5:
img = tf.image.flip_up_down(img)
mask = tf.image.flip_up_down(mask)
if tf.random.uniform(()) > 0.5:
img = tf.image.random_brightness(img, 0.2)
img = tf.image.random_contrast(img, 0.8, 1.2)
img_padded, (h, w, new_h, new_w) = pad_to_square(img, target_size)
mask_padded, _ = pad_to_square(mask, target_size)
img_padded = tf.cast(img_padded, tf.float32) / 255.0
mask_padded = tf.cast(mask_padded, tf.float32) / 255.0
return img_padded, mask_padded
# =============================
# 第4步:创建数据集(无需修改)
# =============================
def create_dataset(image_dir, mask_dir, target_size=512, batch_size=4, augment=False):
image_files = [f for f in os.listdir(image_dir) if f.lower().endswith(('.jpg', '.jpeg', '.png'))]
mask_files = [f for f in os.listdir(mask_dir) if f.lower().endswith('.png')]
image_files.sort()
mask_files.sort()
image_basenames = [os.path.splitext(f)[0] for f in image_files]
mask_basenames = [os.path.splitext(f)[0] for f in mask_files]
pairs = []
for name in image_basenames:
if name in mask_basenames:
img_f = image_files[image_basenames.index(name)]
mask_f = mask_files[mask_basenames.index(name)]
pairs.append((os.path.join(image_dir, img_f), os.path.join(mask_dir, mask_f)))
def generator():
for img_path, mask_path in pairs:
img, mask = load_image_and_mask(img_path, mask_path, target_size, augment)
yield img, mask
dataset = tf.data.Dataset.from_generator(
generator,
output_signature=(
tf.TensorSpec(shape=(target_size, target_size, 3), dtype=tf.float32),
tf.TensorSpec(shape=(target_size, target_size, 1), dtype=tf.float32)
)
)
return dataset.batch(batch_size).prefetch(tf.data.AUTOTUNE)
# =============================
# 第5步:U-Net 模型(无需修改)
# =============================
def build_unet(input_size=(512, 512, 3)):
inputs = layers.Input(input_size)
c1 = layers.Conv2D(64, 3, activation='relu', padding='same')(inputs)
c1 = layers.Conv2D(64, 3, activation='relu', padding='same')(c1)
p1 = layers.MaxPooling2D()(c1)
c2 = layers.Conv2D(128, 3, activation='relu', padding='same')(p1)
c2 = layers.Conv2D(128, 3, activation='relu', padding='same')(c2)
p2 = layers.MaxPooling2D()(c2)
c3 = layers.Conv2D(256, 3, activation='relu', padding='same')(p2)
c3 = layers.Conv2D(256, 3, activation='relu', padding='same')(c3)
p3 = layers.MaxPooling2D()(c3)
c4 = layers.Conv2D(512, 3, activation='relu', padding='same')(p3)
c4 = layers.Conv2D(512, 3, activation='relu', padding='same')(c4)
p4 = layers.MaxPooling2D()(c4)
c5 = layers.Conv2D(1024, 3, activation='relu', padding='same')(p4)
c5 = layers.Conv2D(1024, 3, activation='relu', padding='same')(c5)
u6 = layers.Conv2DTranspose(512, 2, strides=2, padding='same')(c5)
u6 = layers.concatenate([u6, c4])
c6 = layers.Conv2D(512, 3, activation='relu', padding='same')(u6)
c6 = layers.Conv2D(512, 3, activation='relu', padding='same')(c6)
u7 = layers.Conv2DTranspose(256, 2, strides=2, padding='same')(c6)
u7 = layers.concatenate([u7, c3])
c7 = layers.Conv2D(256, 3, activation='relu', padding='same')(u7)
c7 = layers.Conv2D(256, 3, activation='relu', padding='same')(c7)
u8 = layers.Conv2DTranspose(128, 2, strides=2, padding='same')(c7)
u8 = layers.concatenate([u8, c2])
c8 = layers.Conv2D(128, 3, activation='relu', padding='same')(u8)
c8 = layers.Conv2D(128, 3, activation='relu', padding='same')(c8)
u9 = layers.Conv2DTranspose(64, 2, strides=2, padding='same')(c8)
u9 = layers.concatenate([u9, c1])
c9 = layers.Conv2D(64, 3, activation='relu', padding='same')(u9)
c9 = layers.Conv2D(64, 3, activation='relu', padding='same')(c9)
outputs = layers.Conv2D(1, 1, activation='sigmoid')(c9)
return models.Model(inputs=[inputs], outputs=[outputs])
# =============================
# 第6步:训练(添加 ModelCheckpoint 避免丢失)
# =============================
print("🚀 开始训练...")
train_dataset = create_dataset(train_img_dir, train_mask_dir, target_size=512, batch_size=4, augment=True)
val_dataset = create_dataset(val_img_dir, val_mask_dir, target_size=512, batch_size=4, augment=False)
model = build_unet(input_size=(512, 512, 3))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# ✅ 保存模型(防止训练中断)
checkpoint = tf.keras.callbacks.ModelCheckpoint(
os.path.join(base_dir, "best_model.h5"),
save_best_only=True,
monitor='val_loss'
)
history = model.fit(
train_dataset,
validation_data=val_dataset,
epochs=80,
verbose=1,
callbacks=[checkpoint]
)
print("✅ 训练完成!")
# =============================
# 第7步:预测
# =============================
new_image_paths = sorted([
os.path.join(new_img_dir, f)
for f in os.listdir(new_img_dir)
if f.lower().endswith(('.jpg', '.jpeg', '.png'))
])
for img_path in new_image_paths:
try:
if img_path.lower().endswith('.png'):
img = tf.io.read_file(img_path)
img = tf.image.decode_png(img, channels=3)
else:
img = tf.io.read_file(img_path)
img = tf.image.decode_jpeg(img, channels=3)
orig_h, orig_w = img.shape[0], img.shape[1]
img_padded, (h, w, new_h, new_w) = pad_to_square(img, 512)
img_input = tf.cast(img_padded, tf.float32) / 255.0
img_input = tf.expand_dims(img_input, axis=0)
pred_mask_padded = model.predict(img_input, verbose=0)[0]
pred_mask_padded = (pred_mask_padded > 0.5).astype(tf.float32)
pred_mask_orig = unpad_from_square(pred_mask_padded, h, w, new_h, new_w, 512)
pred_mask_orig = tf.cast(pred_mask_orig * 255, tf.uint8)
base_name = os.path.basename(img_path)
number_part = os.path.splitext(base_name)[0]
out_path = os.path.join(output_mask_dir, f"mudstone_{number_part}.png")
Image.fromarray(pred_mask_orig.numpy().squeeze()).save(out_path)
except Exception as e:
print(f"❌ 预测失败: {img_path} - {e}")
print("✅ 预测完成!")
# =============================
# 第8步:打包结果(可选)
# =============================
shutil.make_archive(
os.path.join(base_dir, "mudstone_masks"),
'zip',
output_mask_dir
)
print(f"📦 结果已打包: {os.path.join(base_dir, 'mudstone_masks.zip')}")
②80轮训练效果如下:

③运行结果
点击查看代码
C:\Users\Administrator\.conda\envs\hyspipeline\python.exe H:\MineralDataset\TrainDataset.py
✅ 路径设置完成
🚀 开始训练...
2025-12-09 16:59:14.448986: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
To enable the following instructions: SSE SSE2 SSE3 SSE4.1 SSE4.2 AVX AVX2 AVX512F AVX512_VNNI AVX512_BF16 AVX_VNNI AMX_TILE AMX_INT8 AMX_BF16 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.
Epoch 1/80
127/Unknown - 1809s 14s/step - loss: 0.5518 - accuracy: 0.6783C:\Users\Administrator\.conda\envs\hyspipeline\lib\site-packages\keras\src\engine\training.py:3000: UserWarning: You are saving your model as an HDF5 file via `model.save()`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')`.
saving_api.save_model(
127/127 [==============================] - 1887s 15s/step - loss: 0.5518 - accuracy: 0.6783 - val_loss: 0.5119 - val_accuracy: 0.7723
Epoch 2/80
127/127 [==============================] - 2452s 19s/step - loss: 0.4959 - accuracy: 0.6980 - val_loss: 0.5061 - val_accuracy: 0.6962
Epoch 3/80
127/127 [==============================] - 2500s 20s/step - loss: 0.4781 - accuracy: 0.7317 - val_loss: 0.4683 - val_accuracy: 0.7150
Epoch 4/80
127/127 [==============================] - 2821s 22s/step - loss: 0.4974 - accuracy: 0.7206 - val_loss: 0.4792 - val_accuracy: 0.6990
Epoch 5/80
127/127 [==============================] - 2913s 23s/step - loss: 0.4441 - accuracy: 0.7502 - val_loss: 0.5897 - val_accuracy: 0.6813
Epoch 6/80
127/127 [==============================] - 2686s 21s/step - loss: 0.4022 - accuracy: 0.7981 - val_loss: 0.5683 - val_accuracy: 0.7349
Epoch 7/80
127/127 [==============================] - 1842s 14s/step - loss: 0.3791 - accuracy: 0.8215 - val_loss: 0.5723 - val_accuracy: 0.7339
Epoch 8/80
127/127 [==============================] - 1863s 15s/step - loss: 0.4112 - accuracy: 0.8098 - val_loss: 0.4388 - val_accuracy: 0.7687
Epoch 9/80
127/127 [==============================] - 1826s 14s/step - loss: 0.3623 - accuracy: 0.8326 - val_loss: 0.4023 - val_accuracy: 0.8079
Epoch 10/80
127/127 [==============================] - 1775s 14s/step - loss: 0.3684 - accuracy: 0.8328 - val_loss: 0.4984 - val_accuracy: 0.7599
Epoch 11/80
127/127 [==============================] - 1732s 14s/step - loss: 0.3594 - accuracy: 0.8343 - val_loss: 0.3968 - val_accuracy: 0.8040
Epoch 12/80
127/127 [==============================] - 1885s 15s/step - loss: 0.3575 - accuracy: 0.8353 - val_loss: 0.3823 - val_accuracy: 0.8165
Epoch 13/80
127/127 [==============================] - 1778s 14s/step - loss: 0.3798 - accuracy: 0.8309 - val_loss: 0.4172 - val_accuracy: 0.7865
Epoch 14/80
127/127 [==============================] - 1787s 14s/step - loss: 0.3579 - accuracy: 0.8357 - val_loss: 0.4437 - val_accuracy: 0.7836
Epoch 15/80
127/127 [==============================] - 1783s 14s/step - loss: 0.3593 - accuracy: 0.8349 - val_loss: 0.4318 - val_accuracy: 0.7908
Epoch 16/80
127/127 [==============================] - 1820s 14s/step - loss: 0.3628 - accuracy: 0.8352 - val_loss: 0.4429 - val_accuracy: 0.7932
Epoch 17/80
127/127 [==============================] - 1851s 15s/step - loss: 0.3638 - accuracy: 0.8316 - val_loss: 0.5143 - val_accuracy: 0.7566
Epoch 18/80
127/127 [==============================] - 1739s 14s/step - loss: 0.3588 - accuracy: 0.8387 - val_loss: 0.4449 - val_accuracy: 0.7921
Epoch 19/80
127/127 [==============================] - 1731s 14s/step - loss: 0.3451 - accuracy: 0.8453 - val_loss: 0.3911 - val_accuracy: 0.8140
Epoch 20/80
127/127 [==============================] - 1713s 13s/step - loss: 0.3433 - accuracy: 0.8457 - val_loss: 0.3775 - val_accuracy: 0.8133
Epoch 21/80
127/127 [==============================] - 1711s 13s/step - loss: 0.3511 - accuracy: 0.8379 - val_loss: 0.3933 - val_accuracy: 0.8041
Epoch 22/80
127/127 [==============================] - 1752s 14s/step - loss: 0.3576 - accuracy: 0.8352 - val_loss: 0.4296 - val_accuracy: 0.7856
Epoch 23/80
127/127 [==============================] - 1784s 14s/step - loss: 0.3418 - accuracy: 0.8474 - val_loss: 0.3992 - val_accuracy: 0.8033
Epoch 24/80
127/127 [==============================] - 1785s 14s/step - loss: 0.3529 - accuracy: 0.8387 - val_loss: 0.4965 - val_accuracy: 0.7749
Epoch 25/80
127/127 [==============================] - 1777s 14s/step - loss: 0.3538 - accuracy: 0.8416 - val_loss: 0.3995 - val_accuracy: 0.8099
Epoch 26/80
127/127 [==============================] - 1730s 14s/step - loss: 0.3484 - accuracy: 0.8424 - val_loss: 0.4101 - val_accuracy: 0.7927
Epoch 27/80
127/127 [==============================] - 1717s 14s/step - loss: 0.3558 - accuracy: 0.8314 - val_loss: 0.3730 - val_accuracy: 0.8214
Epoch 28/80
127/127 [==============================] - 1747s 14s/step - loss: 0.3499 - accuracy: 0.8434 - val_loss: 0.3643 - val_accuracy: 0.8161
Epoch 29/80
127/127 [==============================] - 1877s 15s/step - loss: 0.3415 - accuracy: 0.8490 - val_loss: 0.3824 - val_accuracy: 0.8137
Epoch 30/80
127/127 [==============================] - 1821s 14s/step - loss: 0.3400 - accuracy: 0.8457 - val_loss: 0.3709 - val_accuracy: 0.8315
Epoch 31/80
127/127 [==============================] - 1737s 14s/step - loss: 0.3515 - accuracy: 0.8454 - val_loss: 0.4071 - val_accuracy: 0.8137
Epoch 32/80
127/127 [==============================] - 1820s 14s/step - loss: 0.3351 - accuracy: 0.8560 - val_loss: 0.4203 - val_accuracy: 0.7917
Epoch 33/80
127/127 [==============================] - 1858s 15s/step - loss: 0.3325 - accuracy: 0.8499 - val_loss: 0.4276 - val_accuracy: 0.8051
Epoch 34/80
127/127 [==============================] - 1910s 15s/step - loss: 0.3417 - accuracy: 0.8459 - val_loss: 0.3974 - val_accuracy: 0.8107
Epoch 35/80
127/127 [==============================] - 1868s 15s/step - loss: 0.3600 - accuracy: 0.8369 - val_loss: 0.4159 - val_accuracy: 0.7987
Epoch 36/80
127/127 [==============================] - 1776s 14s/step - loss: 0.3383 - accuracy: 0.8521 - val_loss: 0.4221 - val_accuracy: 0.7947
Epoch 37/80
127/127 [==============================] - 1860s 15s/step - loss: 0.3395 - accuracy: 0.8489 - val_loss: 0.4120 - val_accuracy: 0.8166
Epoch 38/80
127/127 [==============================] - 1771s 14s/step - loss: 0.3408 - accuracy: 0.8498 - val_loss: 0.5695 - val_accuracy: 0.7638
Epoch 39/80
127/127 [==============================] - 1949s 15s/step - loss: 0.3400 - accuracy: 0.8495 - val_loss: 0.4302 - val_accuracy: 0.8057
Epoch 40/80
127/127 [==============================] - 1864s 15s/step - loss: 0.3274 - accuracy: 0.8510 - val_loss: 0.3886 - val_accuracy: 0.8206
Epoch 41/80
127/127 [==============================] - 1714s 13s/step - loss: 0.3239 - accuracy: 0.8562 - val_loss: 0.6162 - val_accuracy: 0.7659
Epoch 42/80
127/127 [==============================] - 1725s 14s/step - loss: 0.3435 - accuracy: 0.8519 - val_loss: 0.4203 - val_accuracy: 0.8075
Epoch 43/80
127/127 [==============================] - 1788s 14s/step - loss: 0.3368 - accuracy: 0.8480 - val_loss: 0.5772 - val_accuracy: 0.7765
Epoch 44/80
127/127 [==============================] - 1765s 14s/step - loss: 0.3230 - accuracy: 0.8628 - val_loss: 0.4734 - val_accuracy: 0.7877
Epoch 45/80
127/127 [==============================] - 2543s 20s/step - loss: 0.3224 - accuracy: 0.8593 - val_loss: 0.4336 - val_accuracy: 0.8109
Epoch 46/80
93/127 [====================>.........] - ETA: 8:09 - loss: 0.3479 - accuracy: 0.8394
127/127 [==============================] - 1852s 15s/step - loss: 0.3389 - accuracy: 0.8464 - val_loss: 0.4326 - val_accuracy: 0.7916
Epoch 47/80
127/127 [==============================] - 1814s 14s/step - loss: 0.3357 - accuracy: 0.8483 - val_loss: 0.4237 - val_accuracy: 0.8116
Epoch 48/80
127/127 [==============================] - 1813s 14s/step - loss: 0.3233 - accuracy: 0.8582 - val_loss: 0.4014 - val_accuracy: 0.8166
Epoch 49/80
127/127 [==============================] - 1931s 15s/step - loss: 0.3161 - accuracy: 0.8610 - val_loss: 0.4627 - val_accuracy: 0.8236
Epoch 50/80
127/127 [==============================] - 1778s 14s/step - loss: 0.3293 - accuracy: 0.8584 - val_loss: 0.4276 - val_accuracy: 0.8009
Epoch 51/80
115/127 [==========================>...] - ETA: 2:41 - loss: 0.3182 - accuracy: 0.8590
127/127 [==============================] - 1761s 14s/step - loss: 0.3103 - accuracy: 0.8638 - val_loss: 0.4599 - val_accuracy: 0.8145
Epoch 52/80
127/127 [==============================] - 1722s 14s/step - loss: 0.3310 - accuracy: 0.8556 - val_loss: 0.3952 - val_accuracy: 0.8159
Epoch 53/80
127/127 [==============================] - 1742s 14s/step - loss: 0.3282 - accuracy: 0.8522 - val_loss: 0.5324 - val_accuracy: 0.7971
Epoch 54/80
127/127 [==============================] - 1945s 15s/step - loss: 0.3129 - accuracy: 0.8654 - val_loss: 0.4323 - val_accuracy: 0.8180
Epoch 55/80
127/127 [==============================] - 1813s 14s/step - loss: 0.3499 - accuracy: 0.8371 - val_loss: 0.6181 - val_accuracy: 0.8074
Epoch 56/80
127/127 [==============================] - 1802s 14s/step - loss: 0.3443 - accuracy: 0.8533 - val_loss: 0.4440 - val_accuracy: 0.8217
Epoch 57/80
127/127 [==============================] - 1773s 14s/step - loss: 0.3082 - accuracy: 0.8678 - val_loss: 0.7200 - val_accuracy: 0.7910
Epoch 58/80
127/127 [==============================] - 1738s 14s/step - loss: 0.3212 - accuracy: 0.8593 - val_loss: 0.3792 - val_accuracy: 0.8478
Epoch 59/80
127/127 [==============================] - 1834s 14s/step - loss: 0.3004 - accuracy: 0.8714 - val_loss: 0.4644 - val_accuracy: 0.8035
Epoch 60/80
127/127 [==============================] - 1866s 15s/step - loss: 0.3107 - accuracy: 0.8648 - val_loss: 0.4316 - val_accuracy: 0.8223
Epoch 61/80
127/127 [==============================] - 1699s 13s/step - loss: 0.3136 - accuracy: 0.8625 - val_loss: 0.4537 - val_accuracy: 0.8072
Epoch 62/80
127/127 [==============================] - 1687s 13s/step - loss: 0.3157 - accuracy: 0.8589 - val_loss: 0.3525 - val_accuracy: 0.8377
Epoch 63/80
127/127 [==============================] - 1735s 14s/step - loss: 0.3337 - accuracy: 0.8414 - val_loss: 0.4843 - val_accuracy: 0.8193
Epoch 64/80
127/127 [==============================] - 1710s 13s/step - loss: 0.3126 - accuracy: 0.8639 - val_loss: 0.3473 - val_accuracy: 0.8530
Epoch 65/80
127/127 [==============================] - 1762s 14s/step - loss: 0.3295 - accuracy: 0.8276 - val_loss: 0.4351 - val_accuracy: 0.8068
Epoch 66/80
127/127 [==============================] - 1752s 14s/step - loss: 0.2894 - accuracy: 0.8784 - val_loss: 0.3173 - val_accuracy: 0.8755
Epoch 67/80
127/127 [==============================] - 1710s 13s/step - loss: 0.2621 - accuracy: 0.8908 - val_loss: 0.3319 - val_accuracy: 0.8600
Epoch 68/80
127/127 [==============================] - 2041s 16s/step - loss: 0.2551 - accuracy: 0.8946 - val_loss: 0.3067 - val_accuracy: 0.8814
Epoch 69/80
127/127 [==============================] - 1863s 15s/step - loss: 0.2594 - accuracy: 0.8928 - val_loss: 0.4142 - val_accuracy: 0.8292
Epoch 70/80
127/127 [==============================] - 1818s 14s/step - loss: 0.2587 - accuracy: 0.8922 - val_loss: 0.2773 - val_accuracy: 0.8878
Epoch 71/80
127/127 [==============================] - 1911s 15s/step - loss: 0.2538 - accuracy: 0.8965 - val_loss: 0.2710 - val_accuracy: 0.8877
Epoch 72/80
127/127 [==============================] - 1785s 14s/step - loss: 0.2570 - accuracy: 0.8976 - val_loss: 0.2708 - val_accuracy: 0.8724
Epoch 73/80
127/127 [==============================] - 1856s 15s/step - loss: 0.2578 - accuracy: 0.8899 - val_loss: 0.5696 - val_accuracy: 0.8298
Epoch 74/80
127/127 [==============================] - 1810s 14s/step - loss: 0.2714 - accuracy: 0.8891 - val_loss: 0.3212 - val_accuracy: 0.8833
Epoch 75/80
127/127 [==============================] - 1798s 14s/step - loss: 0.2460 - accuracy: 0.8988 - val_loss: 0.2660 - val_accuracy: 0.8921
Epoch 76/80
127/127 [==============================] - 1727s 14s/step - loss: 0.2417 - accuracy: 0.8999 - val_loss: 0.2653 - val_accuracy: 0.8962
Epoch 77/80
127/127 [==============================] - 1826s 14s/step - loss: 0.2385 - accuracy: 0.9030 - val_loss: 0.2551 - val_accuracy: 0.8987
Epoch 78/80
127/127 [==============================] - 1877s 15s/step - loss: 0.2381 - accuracy: 0.9009 - val_loss: 0.2542 - val_accuracy: 0.8940
Epoch 79/80
127/127 [==============================] - 1976s 16s/step - loss: 0.2338 - accuracy: 0.9027 - val_loss: 0.2549 - val_accuracy: 0.8944
Epoch 80/80
127/127 [==============================] - 2040s 16s/step - loss: 0.2386 - accuracy: 0.9011 - val_loss: 0.2715 - val_accuracy: 0.8905
✅ 训练完成!
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_001.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_002.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_003.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_004.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_005.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_006.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_007.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_008.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_009.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_010.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_011.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_012.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_013.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_014.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_015.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_016.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_017.png - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_018.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_019.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_020.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_021.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_022.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_023.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_024.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_025.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_026.png - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_027.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_028.png - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_029.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_030.jpeg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_031.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_032.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_033.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_034.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_035.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_036.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_037.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_038.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_039.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_040.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_041.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_042.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_043.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_044.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_045.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_046.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_047.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_048.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_049.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_050.jpeg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_051.png - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_052.jpeg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_053.jpeg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_054.jpeg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_055.jpeg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_056.jpeg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_057.jpeg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_058.jpeg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_059.jpeg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_060.jpeg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_061.jpeg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_062.jpeg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_063.jpeg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_064.jpeg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_065.jpeg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_066.jpeg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_067.jpeg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_068.jpeg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_069.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_070.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_071.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_072.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_073.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_074.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_075.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_076.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_077.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_078.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_079.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_080.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_081.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_082.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_083.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_084.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_085.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_086.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_087.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_088.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_089.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_090.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_091.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_092.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_093.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_094.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_095.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_096.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_097.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_098.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_099.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_100.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_101.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_102.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_103.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_104.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_105.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_106.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_107.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_108.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_109.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_110.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_111.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_112.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_113.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_114.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_115.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_116.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_117.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_118.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_119.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_120.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_121.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_122.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_123.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_124.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_125.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_126.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_127.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_128.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_129.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_130.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_131.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_132.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_133.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_134.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_135.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_136.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_137.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_138.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_139.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_140.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_141.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_142.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_143.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_144.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_145.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_146.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_147.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_148.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_149.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_150.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_151.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_152.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_153.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_154.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_155.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_156.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_157.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_158.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_159.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_160.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_161.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_162.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_163.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_164.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_165.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_166.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_167.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_168.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_169.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_170.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_171.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_172.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_173.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_174.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_175.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_176.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_177.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_178.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_179.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_180.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_181.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_182.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_183.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_184.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_185.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_186.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_187.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_188.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_189.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_190.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_191.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_192.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_193.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_194.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_195.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_196.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_197.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_198.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_199.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_200.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_201.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_202.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_203.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_204.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_205.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_206.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_207.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_208.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_209.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_210.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_211.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_212.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_213.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_214.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_215.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_216.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_217.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_218.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_219.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_220.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_221.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_222.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_223.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_224.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_225.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_226.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_227.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_228.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_229.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_230.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_231.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_232.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_233.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_234.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_235.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_236.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_237.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_238.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_239.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_240.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_241.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_242.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_243.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_244.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_245.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_246.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_247.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_248.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_249.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_250.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_251.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_252.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_253.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_254.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_255.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_256.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_257.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_258.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_259.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_260.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_261.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_262.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_263.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_264.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_265.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_266.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_267.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_268.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_269.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_270.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_271.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_272.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_273.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_274.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_275.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_276.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_277.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_278.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_279.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_280.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_281.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_282.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_283.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_284.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_285.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_286.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_287.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_288.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_289.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_290.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_291.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_292.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_293.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_294.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_295.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_296.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_297.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_298.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_299.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_300.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_301.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_302.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_303.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_304.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_305.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_306.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_307.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_308.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_309.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_310.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_311.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_312.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_313.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_314.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_315.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_316.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_317.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_318.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_319.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_320.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_321.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_322.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_323.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_324.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_325.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_326.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_327.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_328.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_329.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_330.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_331.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_332.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_333.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_334.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_335.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_336.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_337.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_338.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_339.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_340.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_341.jpeg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_342.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_343.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_344.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_345.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_346.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_347.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_348.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_349.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_350.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_351.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_352.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_353.jpeg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_354.png - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_355.jpg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_356.jpeg - Cannot interpret 'tf.float32' as a data type
❌ 预测失败: H:\MineralDataset\Dataset_DolomiteLimestoneShale\Images\Basalt_357.jpg - Cannot interpret 'tf.float32' as a data type
✅ 预测完成!
📦 结果已打包: H:\MineralDataset\Dataset_DolomiteLimestoneShale\mudstone_masks.zip
进程已结束,退出代码为 0
【预测失败了,唉,我还是labelme手动标注数据集的标签吧】
浙公网安备 33010602011771号