如何将tf.random.normal生成的random_vector保存为5×5网格?
解决方法:绑定保存随机向量与生成图片
别担心,新手遇到这种“追踪输入输出对应关系”的问题太正常了——毕竟生成模型的输入是随机向量,不像有监督数据集那样有明确的标签对应,很容易找不到关联。
你的核心需求是让5×5网格里的每一张生成图,都能对应到生成它的那个随机向量。最直接的方案就是把生成图片时用的input_(也就是你的random_vector)和图片用相同的命名规则保存下来,这样后续就能精准对应上。
方案1:保存随机向量到单独文件(最推荐)
修改你的save_images函数,在保存图片的同时,把对应的随机向量保存为numpy压缩文件(.npz),命名和图片完全对应:
import numpy as np # 确保导入numpy def save_images(model, epoch, step, input_): prediction = model.predict(input_) fig, axes = plt.subplots(5,5, figsize = (14,14)) idx = 0 for row in range(5): for column in range(5): image = prediction[idx] * 255 image = image.astype("int32") axes[row, column].imshow(image) axes[row, column].axis("off") idx+=1 output_path = "./anime-faces/" if not os.path.exists(output_path): os.mkdir(output_path) # 定义统一的文件名前缀 file_prefix = output_path + "Epoch_{:04d}_step_{:04d}".format(epoch, step) # 保存图片 plt.savefig(file_prefix + ".jpg") plt.close() # 保存对应的随机向量:如果input_是TensorFlow张量,先转成numpy数组 vec_data = input_.numpy() if isinstance(input_, tf.Tensor) else input_ np.savez(file_prefix + "_vectors.npz", vectors=vec_data)
这样每次生成Epoch_xxxx_step_xxxx.jpg时,都会同步生成一个Epoch_xxxx_step_xxxx_vectors.npz文件,里面存储了25个随机向量(顺序和5×5网格的图片完全一致:从左到右、从上到下对应第0到第24个向量)。
后续要读取对应向量时,只需要:
# 加载向量文件 data = np.load("Epoch_xxxx_step_xxxx_vectors.npz") random_vectors = data['vectors'] # 获取第0行第0列图片对应的向量(对应网格里的第一个位置) first_vec = random_vectors[0]
方案2:在图片上标注向量的简短信息(可选,适合快速查看)
如果你想在生成的图片上直接看到向量的部分信息(不影响原图的前提下),可以给每个子图添加标题,标注向量的前几个数值或者哈希值:
def save_images(model, epoch, step, input_): prediction = model.predict(input_) fig, axes = plt.subplots(5,5, figsize = (14,14)) idx = 0 for row in range(5): for column in range(5): image = prediction[idx] * 255 image = image.astype("int32") axes[row, column].imshow(image) axes[row, column].axis("off") # 将Tensor转成numpy数组(如果需要) vec = input_[idx].numpy() if isinstance(input_, tf.Tensor) else input_[idx] # 添加向量的简短标注:比如前3个数值保留两位小数 axes[row, column].set_title(f"Vec: {vec[:3].round(2)}", fontsize=8) idx+=1 output_path = "./anime-faces/" if not os.path.exists(output_path): os.mkdir(output_path) plt.savefig(output_path + "Epoch_{:04d}_step_{:04d}.jpg".format(epoch, step)) plt.close()
这种方式的好处是不用单独打开向量文件,就能快速关联图片和向量,但会占用图片的少量空间,你可以根据需求选择。
内容的提问来源于stack exchange,提问作者Litz
相关产品推荐
相关产品推荐

