我正在学习由 Aladdin Persson 编写的关于数据增强的教程。在该教程中,TensorFlow 中的一些预处理模块当时(3 年前)仍在进行实验,例如 RandomFlip、
我正在学习由 aladdin persson 编写的关于数据增强的教程。在教程中,TensorFlow 中的一些预处理模块当时(3 年前)仍在进行实验,例如 RandomFlip、Resizing。因此教程使用了类似 layer.experimental.preprocessing.Resizing(\'data property\') 的代码。然而,尽管 3 年前教程中的代码输出没有引发任何错误,但现在我却没有得到无错误的输出,这些是我一直收到的带有回溯的错误:
Traceback (most recent call last):
File "c:\Users\USER\CODE\PycharmProjects\pythonProject2Conda\main4.py", line 54, in <module>
layers.experimental.preprocessing.Resizing(height=32, width=32),
^^^^^^^^^^^^^^^^^^^
AttributeError: module 'keras._tf_keras.keras.layers' has no attribute 'experimental'
这是实际的代码主体,根据我的理解,它应该用于训练我的神经网络进行数据增强。
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers, regularizers
import tensorflow_datasets as tfds
import pandas as pd
from tensorflow.keras.optimizers.legacy import Adam
#HYPER PARAMETERS
(ds_train, ds_test), ds_info = tfds.load(
"cifar10",
split=["train", "test"],
shuffle_files=True,
as_supervised=True,
with_info=True
)
def normalize_img(image, label):
return tf.cast(image, tf.float32)/255.0, label
AUTOTUNE = tf.data.experimental.AUTOTUNE
BATCH_SIZE = 32
def augment(image, label):
new_height = new_width = 32
image = tf.image.resize(image, (new_height, new_width))
if tf.random.uniform((), minval=0, maxval=1) <0.1:
image = tf.tile(tf.image.rgb_to_grayscale(image), [1,1,3])
image = tf.image.random_brightness(image, max_delta = 0.1)
image = tf.image.random_contrast(image, lower=0.1, upper=0.2)
image = tf.image.random_flip_left_right(image) #50% of cases will be flipped left and right
# image = tf.image.random_flip_up_down(image) 50%
return image, label
ds_train = ds_train.map(normalize_img, num_parallel_calls=AUTOTUNE)
ds_train = ds_train.cache()
ds_train = ds_train.shuffle(ds_info.splits["train"].num_examples)
#ds_train = ds_train.map(augment, num_parallel_calls=AUTOTUNE)
ds_train = ds_train.batch(BATCH_SIZE)
ds_train = ds_train.prefetch(AUTOTUNE)
ds_test = ds_test.map(normalize_img, num_parallel_calls=AUTOTUNE)
de_test = ds_test.batch(BATCH_SIZE)
ds_test = ds_test.prefetch(AUTOTUNE)
data_augmentation = keras.Sequential([
layers.experimental.preprocessing.Resizing(height=32, width=32),
layers.experimental.preprocessing.RandomFlip(mode="horizontal"),
layers.experimental.preprocessing.RandomContrast(factor=0.1),
])
model = keras.Sequential ([
keras.Input((32, 32, 3)),
layers.Conv2D(4, 3, padding="same", activation='relu'),
layers.Conv2D(8, 3, padding="same", ctivation='relu'),
layers.MaxPooling2D(),
layers.Conv2D(16, 3, activation='relu'),
layers.Flatten(),
layers.Dense(64, activation="relu"),
layers.Dense(10),
])
model.compile(
optimizer=keras.optimizers.Adam(3e-4),
loss = keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=["accuracy"],
)
model.fit(ds_train, epochs=5, verbose=2)
model.evaluate(ds_test)