用tensorflow处理大型图片集是不是需要非常强大的电脑配置?
来源:6-9 编写训练神经网络的方法(下)
慕粉1024131855
2018-04-21
用tensorflow处理大型图片集是不是需要非常强大的电脑配置?我尝试用PhotoshopAI的代码处理我准备的256*256像素的图片集,train的时候崩溃了。后来将每轮训练的图片数和训练轮数改小了才能运行。但运行结果明显不对,下面是运行截图和我改过的代码。
# Hyperparameters 超参数
EPOCHS = 2
BATCH_SIZE = 10
LEARNING_RATE = 0.0002
BETA_1 = 0.5
# 定义判别器模型
def discriminator_model():
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Conv2D(
32, # 64 个过滤器,输出的深度(depth)是 64
(5, 5), # 过滤器在二维的大小是(5 * 5)
padding='same', # same 表示输出的大小不变,因此需要在外围补零2圈
input_shape=(256, 256, 3) # 输入形状[256, 256, 3]。3 表示 RGB 三原色 256*32
))
model.add(tf.keras.layers.Activation("tanh")) # 添加 Tanh 激活层
model.add(tf.keras.layers.MaxPool2D(pool_size=(2, 2))) # 池化层 128*32
model.add(tf.keras.layers.Conv2D(64, (5, 5))) #128*64
model.add(tf.keras.layers.Activation("tanh"))
model.add(tf.keras.layers.MaxPool2D(pool_size=(2, 2))) #64*64
model.add(tf.keras.layers.Conv2D(128, (5, 5))) #64*128
model.add(tf.keras.layers.Activation("tanh"))
model.add(tf.keras.layers.MaxPool2D(pool_size=(2, 2))) #32*128
model.add(tf.keras.layers.Conv2D(128, (5, 5)))
model.add(tf.keras.layers.Activation("tanh"))
model.add(tf.keras.layers.MaxPool2D(pool_size=(2, 2))) #16*128
model.add(tf.keras.layers.Conv2D(128, (5, 5)))
model.add(tf.keras.layers.Activation("tanh"))
model.add(tf.keras.layers.MaxPool2D(pool_size=(2, 2))) #8*128
model.add(tf.keras.layers.Flatten()) # 扁平化
model.add(tf.keras.layers.Dense(1024)) # 1024 个神经元的全连接层
model.add(tf.keras.layers.Activation("tanh"))
model.add(tf.keras.layers.Dense(1)) # 1 个神经元的全连接层
model.add(tf.keras.layers.Activation("sigmoid")) # 添加 Sigmoid 激活层
return model
# 定义生成器模型
# 从随机数来生成图片
def generator_model():
model = tf.keras.models.Sequential()
# 输入的维度是 100, 输出维度(神经元个数)是1024 的全连接层
model.add(tf.keras.layers.Dense(input_dim=100, units=1024))
model.add(tf.keras.layers.Activation("tanh"))
model.add(tf.keras.layers.Dense(128 * 8 * 8)) # 8192 个神经元的全连接层
model.add(tf.keras.layers.BatchNormalization()) # 批标准化
model.add(tf.keras.layers.Activation("tanh"))
model.add(tf.keras.layers.Reshape((8, 8, 128), input_shape=(128 * 8 * 8, ))) # 8 x 8 像素
model.add(tf.keras.layers.UpSampling2D(size=(2, 2))) # 16 x 16像素
model.add(tf.keras.layers.Conv2D(128, (5, 5), padding="same"))
model.add(tf.keras.layers.Activation("tanh"))
model.add(tf.keras.layers.UpSampling2D(size=(2, 2))) # 32 x 32像素
model.add(tf.keras.layers.Conv2D(128, (5, 5), padding="same"))
model.add(tf.keras.layers.Activation("tanh"))
model.add(tf.keras.layers.UpSampling2D(size=(2, 2))) # 64 x 64像素
model.add(tf.keras.layers.Conv2D(128, (5, 5), padding="same"))
model.add(tf.keras.layers.Activation("tanh"))
model.add(tf.keras.layers.UpSampling2D(size=(2, 2))) # 128 x 128像素
model.add(tf.keras.layers.Conv2D(128, (5, 5), padding="same"))
model.add(tf.keras.layers.Activation("tanh"))
model.add(tf.keras.layers.UpSampling2D(size=(2, 2))) # 256 x 256像素
model.add(tf.keras.layers.Conv2D(3, (5, 5), padding="same"))
model.add(tf.keras.layers.Activation("tanh"))
return model
3回答
-
你能否把你用的 256 x 256 的图片集发给我邮箱,我好测试一下看看怎么回事:
enmingx@gmail.com
谢谢
00 -
Oscar
2018-04-23
你的代码不是最新的,请参考这个问答来重置项目把代码改成最新:
https://coding.imooc.com/learn/questiondetail/49642.html
我用你改过的代码来测试,好像还不错嘛,没有出现你的那种奇怪的结果。如下图:
我在公司的电脑上训练的。继续训练中。我反正让它训练着,我设了 Epochs 是 100 轮,所以会比较花时间。训练完了到时候私下联系你。
公司的电脑还不错,虽然是 CPU(没有 Nvidea 的 GPU),但内存是 16 GB,i7 的 CPU (4 核)。
训练一步大概是 30 秒左右。所以好像也还可以,256 x 256 的图片不会特别需要高级 GPU,当然了,你要训练快一些肯定还是高级 GPU 更好。
你在邮件里说你那里有些图片像素很大(近千像素),那样的话训练起来很吃力,可以考虑更加强劲的 GPU 来训练,比如 Nvidea 的 Titan 系列:
https://www.nvidia.com/zh-tw/titan/titan-v
不是太贵,一两万多一块(目前最强的是Titan V 显卡,京东上我看了是 22000 多元一块 https://item.jd.com/6630315.html#crumb-wrap )。
我的学员里面有的他们学校实验室做 AI 项目就是买的 Titan 显卡,有的导师让他们买了两块显卡一起用。
你可以咨询一下 Nvidea 的客服,关于你们的需求,应该配备多少块 Titan 比较合适,以及是买 Titan V 还是 Titan XP 或是其他。10 -
慕粉1024131855
提问者
2018-04-23
老师,我已经将图片集发到你邮箱了,谢谢指点。
012018-04-23
相似问题