文章目录

  • 卷积层 Conv2D
  • 可分离卷积层 SeparableConv2D
  • ImageDataGenerator & flow_from_directory
  • fit_generator & predict_generator
  • applications.ResNet50
  • flow_from_dataframe
卷积层 Conv2D
model = keras.models.Sequential() # 以下代码均省略了 keras.layers.
model.add(Conv2D(filters=32, kernel_size=3, padding='same', activation='relu', input_shape=(28,28,1)))
model.add(Conv2D(filters=32, kernel_size=3, padding='same', activation='relu'))
model.add(MaxPool2D(pool_size=2))
...model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(10, activation='softmax'))model.compile(loss=tf.keras.losses.SparseCategoricalCrossentropy(), optimizer=keras.optimizers.SGD(learning_rate=1e-2), metrics=['accuracy'])

filter_size是每两个要翻倍: 32 32 池化 64 64 池化 128 128 池化。

flatten 池化之后要展平。

激活函数可以换成 selu, selu 自带批归一化 BN, 效果更好

可分离卷积层 SeparableConv2D
model = keras.models.Sequential()
model.add(Conv2D(filters=32, kernel_size=3, padding='same', activation='selu', input_shape=(28,28,1)))
model.add(SeparableConv2D(filters=32, kernel_size=3, padding='same', activation='selu'))
model.add(MaxPool2D(pool_size=2))
model.add(SeparableConv2D(filters=64, kernel_size=3, padding='same', activation='selu'))
model.add(SeparableConv2D(filters=64, kernel_size=3, padding='same', activation='selu'))
model.add(MaxPool2D(pool_size=2))
ImageDataGenerator & flow_from_directory

tf.keras.preprocessing.image.ImageDataGenerator

Generate batches of tensor image data with real-time data augmentation.

使用实时数据增强生成一批图片(tensor)

train_generator = keras.preprocessing.image.ImageDataGenerator(rescale = 1./255,rotation_range = 40,width_shift_range = 0.2, # 0.2=20%, >1则表示像素height_shift_range = 0.2,shear_range = 0.2,zoom_range = 0.2,horizontal_flip = True,fill_mode = 'nearest',
)
train_gen = train_generator.flow_from_directory(train_dir, target_size=(height, width), batch_size=batch_size, seed=7, shuffle=True, class_mode='categorical')
valid_generator = keras.preprocessing.image.ImageDataGenerator(rescale=1./255)
valid_gen = valid_generator.flow_from_directory(valid_dir, shuffle=False, ...)
train_num = train_generator.samples # 获得图片文件数量
for i in range(2):x, y = train_gen.next()print(x.shape, y)

flow_from_directory产生keras_preprocessing.image.directory_iterator.DirectoryIterator

DirectoryIterator.samples 含义如下:

class DirectoryIterator(BatchFromFilesMixin, Iterator):def __init__(self, .....)samples = len(self.filenames)
fit_generator & predict_generator
model = keras.models.Sequential([some layers])
model.compile(loss='categorical_crossentropy', ...)
history = model.fit_generator(train_gen, steps_per_epoch=train_num//batch_size, epochs=epochs, validation_data=valid_gen, validation_steps=valid_num//batch_size)
model.predict_generator(test_gen, workers=10, use_multiprocessing=True)

Fits the model on data yielded batch-by-batch by a Python generator. (deprecated)

Warning: THIS FUNCTION IS DEPRECATED. It will be removed in a future version. Instructions for updating: Please use Model.fit, which supports generators. 换成model.fit, 支持generator.

Generates predictions for the input samples from a data generator. (deprecated)

Warning: THIS FUNCTION IS DEPRECATED. It will be removed in a future version. Instructions for updating: Please use Model.predict, which supports generators. 换成model.predict, 支持generator

applications.ResNet50
resnet50_fine_tune = keras.models.Sequential()
resnet50_fine_tune.add(keras.applications.ResNet50(include_top=False, pooling='avg', weights='imagenet'))
resnet50_fine_tune.add(keras.layers.Dense(num_classes, activation='softmax'))
resnet50_fine_tune.layers[0].trainable = False # 除了第一层都能调整
resnet50_fine_tune.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
resnet50_fine_tune.summary()
resnet50 = keras.applicationstions.ResNet50(include_top=False, pooling='avg', weights='image')
for layer in resnet50.layers[0:-5]: # 只调整最后几层layer.trainable = Falseresnet50_new = keras.models.Sequential([resnet50,keras.layers.Dense(num_classes, activation='softmax')
])
flow_from_dataframe
train_generator = keras.preprocessing.image.ImageDataGenerator(rescale=1./255, ...)
train_gen = train_generator.flow_from_dataframe(train_df,directory=None, # 为文件名添加前缀x_col = 'filepath', # 文件名在dataframe的哪一列y_col = 'class', # 类别在dataframe的哪一列. 类别是car, horse等字符串, 无需是0123..classes = class_names,target_size = (height, width),batch_size = batch_size,seed = 7,shuffle = True,class_mode = 'sparse'
)

keras_preprocessing.image.dataframe_iterator.DataFrameIterator

DataFrame中存放文件名和类别名,然后用flow_from_dataframe从文件系统中读,是flow_from_directory的替代。

Tensorflow 2.0 学习(chapter 6)相关推荐

  1. tensorflow 1.0 学习:参数和特征的提取

    tensorflow 1.0 学习:参数和特征的提取 在tf中,参与训练的参数可用 tf.trainable_variables()提取出来,如: #取出所有参与训练的参数 params=tf.tra ...

  2. tensorflow 1.0 学习:十图详解tensorflow数据读取机制

    本文转自:https://zhuanlan.zhihu.com/p/27238630 在学习tensorflow的过程中,有很多小伙伴反映读取数据这一块很难理解.确实这一块官方的教程比较简略,网上也找 ...

  3. tensorflow 1.0 学习:模型的保存与恢复(Saver)

    将训练好的模型参数保存起来,以便以后进行验证或测试,这是我们经常要做的事情.tf里面提供模型保存的是tf.train.Saver()模块. 模型保存,先要创建一个Saver对象:如 saver=tf. ...

  4. tensorflow 1.0 学习:参数初始化(initializer)

    CNN中最重要的就是参数了,包括W,b. 我们训练CNN的最终目的就是得到最好的参数,使得目标函数取得最小值.参数的初始化也同样重要,因此微调受到很多人的重视,那么tf提供了哪些初始化参数的方法呢,我 ...

  5. TensorFlow 2.0不好用?会了是“真香”!

    记得 TensorFlow 2.0 刚发布时,一票开发者都在疯狂吐槽:官方文档不好找,bug 没有及时修复和更新等等.尽管上线这么久,仍有大量开发者不愿从 1.x 升级,或从别的框架迁移过来. 事实上 ...

  6. TensorFlow 2.0来了,为什么他却说“深度学习框架之争,现在谈结果为时尚早”?...

    记者 | 琥珀 出品 | AI科技大本营(ID:rgznai100) 半个多世纪前,浙江大学老校长竺可桢曾有两个非常经典的教育问题:"诸位在校,有两个问题应该自己问问,第一,到浙大来做什么? ...

  7. 深度学习实战—基于TensorFlow 2.0的人工智能开发应用

    作者:辛大奇 著 出版社:中国水利水电出版社 品牌:智博尚书 出版时间:2020-10-01 深度学习实战-基于TensorFlow 2.0的人工智能开发应用

  8. 资源|2019 年 11 月最新《TensorFlow 2.0 深度学习算法实战》中文版教材免费开源(附随书代码+pdf)...

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送 2019 年 10 月,谷歌正式宣布,开源机器学习库 TensorFlow 2.0 现在 ...

  9. 基于TensorFlow 2.0的中文深度学习开源书来了!GitHub趋势日榜第一,斩获2K+星

    十三 发自 凹非寺  量子位 报道 | 公众号 QbitAI TensorFlow 2.0 发布已有一个半月之久,你会用了吗? 近日,一个叫做深度学习开源书的项目在火了.GitHub趋势日榜排名全球第 ...

  10. 官方推荐!用TensorFlow 2.0做深度学习入门教程

    最近,TensorFlow 2.0版的开发者预览版发布没多久,这不,又有一篇优质教程来了. 最近,前Youtube视频分类的产品经理.Hands-On MachineLearning with Sci ...

最新文章

  1. HDU - 4614 Vases and Flowers 线段树+二分
  2. SMAT,PacBio
  3. 二十四、redis发布订阅
  4. 企业网络推广方法之网站内容链接SEO该怎么做?
  5. Android MediaPlayer
  6. C++ RBTree(红黑树) 算法(附完整源码)
  7. SAP Spartacus B2B 页面的 Popup Component
  8. 【剑指offer】——求出一个正整数的质数因子(Python)
  9. java不可变类型_Java中的值类型:为什么它们不可变?
  10. 如何使用Create React App DevOps自动化工作中所有无聊的部分
  11. 飞鸽_飞鸽传书_飞鸽传书2010_飞鸽传书2010下载
  12. windows环境下注册安装GitHub Desktop使用方法详解
  13. 曾遭闪电贷攻击的Origin将重新推出稳定币OUSD
  14. mysql 字符串的hash函数_【转载】字符串Hash函数比较
  15. Opencv实现多张JPG转GIF
  16. CRAFT(Character Region Awareness for Text Detection)
  17. html表格转excel有科学计数法,table2excel生成excel表格出现科学计数法问题
  18. Problem Set 2 Hangman Game字谜游戏
  19. python代码学习
  20. mybatis show sql

热门文章

  1. mysql三表联查sql语句_SQL三表连接查询与集合的并、交、差运算查询
  2. 字节跳动否认完成支付牌照收购 或是基于央行批准的不确定性
  3. 如何查看电脑系统版本
  4. HDU 4415 Assassin’s Creed(贪心)
  5. Scrum立会报告+燃尽图(十月二十八日总第十九次)
  6. AFFF3%水成膜泡沫灭火剂生产厂家分析品牌哪家好数据说明
  7. 冷酷仙境与世界尽头——《葫芦兄弟》人物赏析  作者:马伯庸
  8. [转载]基于Servlet的Google Earth之旅
  9. 滴滴章文嵩分享大数据在城市智慧交通领域探索实践
  10. js实现addClass、removeClass方法