python - 用于图像增强的 TensorFlow 使 keras 无法工作
问题描述
我正在实施 CNN 进行图像分类;我使用 keras 采用了一个随机的 CNN 架构
import keras
from keras.models import Sequential,Input,Model
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras.layers.normalization import BatchNormalization
from keras.layers.advanced_activations import LeakyReLU
model = Sequential()
model.add(Conv2D(filters=32, kernel_size=(3, 3), activation="relu", input_shape=(n,n,1)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(filters=64, kernel_size=(5, 5), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(num_classes, activation='softmax'))
model.compile(loss=keras.losses.categorical_crossentropy, optimizer=keras.optimizers.Adam(),metrics=['accuracy'])
train = model.fit(train_X, train_label, batch_size=batch_size,epochs=epochs,verbose=1,validation_data=(valid_X, valid_label))
我正在尝试使用 tensorflow 的代码进行图像增强,我更喜欢此代码而不是使用 keras ImageDataGenerator 进行数据增强,因为它让我更灵活。
import tensorflow as tf
def rotate_images(X_imgs):
X_rotate = []
tf.reset_default_graph()
X = tf.placeholder(tf.float32, shape = (n, n, 1))
k = tf.placeholder(tf.int32)
tf_img = tf.image.rot90(X, k = k)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for img in X_imgs:
for i in range(3): # Rotation at 90, 180 and 270 degrees
rotated_img = sess.run(tf_img, feed_dict = {X: img, k: i + 1})
X_rotate.append(rotated_img)
X_rotate = np.array(X_rotate, dtype = np.float32)
return X_rotate
当我尝试拟合我的模型时,我收到以下错误消息
InvalidArgumentError: Tensor dense_7_target:0, specified in either feed_devices or fetch_devices was not found in the Graph
看起来graph是tensorflow使用的东西,我认为我在keras和tansorflow之间的交互很糟糕;令人惊讶的是我曾经能够运行我的模型,但现在它又坏了..
如果您需要更多信息,请告诉我;感谢帮助
解决方案
不要使用tf.reset_default_graph()
,您可以为您的函数创建一个新的临时图表:
import tensorflow as tf
def rotate_images(X_imgs):
X_rotate = []
with tf.Graph().as_default():
X = tf.placeholder(tf.float32, shape = (n, n, 1))
k = tf.placeholder(tf.int32)
tf_img = tf.image.rot90(X, k = k)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for img in X_imgs:
for i in range(3): # Rotation at 90, 180 and 270 degrees
rotated_img = sess.run(tf_img, feed_dict = {X: img, k: i + 1})
X_rotate.append(rotated_img)
X_rotate = np.array(X_rotate, dtype = np.float32)
return X_rotate
推荐阅读
- sql - SQL。是否可以在查询中进行“统计”?
- python - 为什么这些 Keras Sequential 模型和 Functional API 行为不同?
- keras - 如何预训练 CNN 以将 CNN 权重传递给 LSTM?
- c# - Raycast 曾经阻止玩家穿过墙壁,只有一半的时间工作
- microsoft-teams - 列出 MS Teams 中用户的聊天消息引发禁止错误 - Graph Api
- xml - (Recursion-2) 所有深度级别元素的自动递增并保持遗传路径
- python - Python-Loop:从 opentopomap.org 下载 .png 并将单个 png 文件连接成一张大图
- amazon-s3 - 来自 S3 的 MemSQL 管道将 NULL 插入 DATE 类型列
- java - 如何返回一个子类独有的变量?
- javascript - 3DS 检查后条带订阅不完整