import tensorflow as tf def read_img(path): return tf.image.decode_image(tf.io.read_file(path)) def psnr(tf_img1, tf_img2): return tf.image.psnr(tf_img1, tf_img2, max_val=255) def _main(): t1 = read_img('D:/SteganoGAN-master/research/ruanjian.png') t2 = read_img('D:/SteganoGAN-master/research/outtt.png') with tf.Session() as sess: sess.run(tf.global_variables_initializer()) y = sess.run(psnr(t1, t2)) print(y) if __name__ == '__main__': _main()
时间: 2023-07-16 11:12:26 浏览: 67
这段代码使用TensorFlow计算两张图片之间的PSNR值。具体来说,它使用了TensorFlow中的tf.image.decode_image()函数读取图片,并将其作为参数传递给tf.image.psnr()函数,该函数计算两张图片的PSNR值。最后,使用TensorFlow会话来执行计算并打印结果。需要注意的是,这段代码需要运行在已经安装了TensorFlow的环境中。
相关问题
import tensorflow as tf from tensorflow import keras from keras import layers import xml.etree.ElementTree as ET import pathlib from pathlib import Path file_path = Path('C:/1') def net_init(): model = keras.Sequential([layers.Input(shape=(1200, 1600, 3))]) model.add(layers.Conv2D(filters=3, activation="relu", kernel_size=(3, 3), padding="same", strides=2)) model.add(layers.MaxPool2D(pool_size=(2, 2))) model.add(layers.Conv2D(filters=3, activation="relu", kernel_size=(3, 3), padding="same", strides=2)) model.add(layers.MaxPool2D(pool_size=(2, 2))) model.add(layers.Conv2D(filters=1, activation="relu", kernel_size=(3, 3), padding="same", strides=2)) model.add(layers.MaxPool2D(pool_size=(2, 2))) model.add(layers.Dense(48, activation='relu')) model.add(layers.Dense(2, activation='softmax')) return model def load_xml(folder_path: Path) -> list: feature_list = [] file_list = [] label_list = [] for file_name in folder_path.glob('*.xml'): xml_tree = ET.parse(file_name) root = xml_tree.getroot() feature = ( int(root.find('object/bndbox/xmin').text), int(root.find('object/bndbox/ymin').text), int(root.find('object/bndbox/xmax').text), int(root.find('object/bndbox/ymax').text) ) feature_list.append(feature) file_list.append(file_name) label_list.append(root.find('object/name').text) return feature_list, file_list, label_list def load_img(folder_path : Path, xml_list : list): img_list = [] print(xml_list) for img_name in folder_path.glob('*.jpg'): print(img_name) xml_name = img_name.with_suffix('.xml') print(xml_name) if xml_name in xml_list: print("yes") img = tf.io.read_file(img_name.as_posix()) img = tf.image.decode_image(img, channels=3) img = tf.image.per_image_standardization(img) img_list.append(img) return img_list def main(): feature_list, file_list, label_list = load_xml(file_path) img_list = load_img(file_path, file_list) model = net_init() model.compile(optimizer='adam', loss=tf.keras.losses.mse, metrics=['accuracy']) model.fit(img_list, feature_list, epochs=1) main()这段程序有什么问题
这段程序可能会有以下问题:
1. 程序中没有明确指定输入的图像尺寸,而模型中的第一层需要接受一个 (1200, 1600, 3) 的输入,可能会导致输入图像的尺寸不符合要求而导致程序出错。
2. 程序中使用了标准化函数 tf.image.per_image_standardization() 对输入图像进行标准化处理,但这个函数会将图像像素值减去均值再除以标准差,这有可能会导致图像像素值超出了合理范围,需要使用其他的标准化方法。
3. 程序中编译模型时,损失函数使用的是均方误差(MSE),但这个损失函数通常用于回归问题,对于分类问题来说,应该使用交叉熵损失函数。
4. 程序中训练模型时,只训练了一个 epoch,这可能会导致模型未能充分学习特征,需要增加训练 epochs 的数量。
Traceback (most recent call last): File "D:/SteganoGAN-master/research/psnr.py", line 25, in <module> _main() File "D:/SteganoGAN-master/research/psnr.py", line 16, in _main t1 = read_img('D:/SteganoGAN-master/research/ruanjian.png') File "D:/SteganoGAN-master/research/psnr.py", line 8, in read_img return tf.image.decode_image(tf.read_file(path)) AttributeError: module 'tensorflow' has no attribute 'read_file'
这个错误提示是说在你的代码中使用了 `tensorflow` 模块中不存在的 `read_file` 属性。
在 `tensorflow` 2.0 版本之后,`read_file` 方法已经被移动到了 `tf.io` 模块中,所以你需要将代码中的 `tf.read_file` 替换为 `tf.io.read_file`。
下面是修改后的代码示例:
```python
import tensorflow as tf
def read_img(path):
return tf.image.decode_image(tf.io.read_file(path))
def _main():
t1 = read_img('D:/SteganoGAN-master/research/ruanjian.png')
t2 = read_img('D:/SteganoGAN-master/research/ruanjian_steg.png')
psnr = tf.image.psnr(t1, t2, max_val=255)
print("PSNR:", psnr)
if __name__ == '__main__':
_main()
```
修改后的代码中使用了 `tf.io.read_file` 方法来读取图像文件,应该可以解决你遇到的问题。
阅读全文