TensorFlow——tf.keras高阶API实例

小tips:将文本与序号对应

例:

test = 'i am a student'
# 元组推导式:生成器
dict((word,test.split().index(word)) for word in test.split())

输出:{‘i’: 0, ‘am’: 1, ‘a’: 2, ‘student’: 3}

tf.keras序列问题

实例:电影评论数据

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
# 加载电影评论数据
data = keras.datasets.imdb
max_word = 10000
# 进行数据加载
(x_train,y_train),(x_test,y_test) = data.load_data(num_words=max_word) # num_words指定编码单词的个数,此处表示只给前10000个单词进行编码
x_train.shape,y_train.shape

out:((25000,), (25000,))

x_train[0] # 用一个整数来代替单词

out:在这里插入图片描述
将文本训练成密集向量

# 将数据长度填充到指定长度
x_train = keras.preprocessing.sequence.pad_sequences(x_train,300)
x_test = keras.preprocessing.sequence.pad_sequences(x_test,300)
model = keras.models.Sequential()

# 将整数映射成密集向量
# 参数一:输入数据的维度
# 参数二:映射向量的长度
model.add(layers.Embedding(10000,50,input_length=300))

#(25000,300,50)
# 给数据降维
# model.add(layers.Flatten())
#解决过拟合方法2:
model.add(layers.GlobalAveragePooling1D()) # 比Flatten更好的降维方法,实质是缩小模型的规模

#model.add(layers.Dense(128,activation='relu'))
#解决过拟合方法3:
model.add(layers.Dense(64,activation='relu'))
#解决过拟合方法4:使用正则化l1、l2
#model.add(layers.Dense(128,activation='relu',kernel_regularizer='l2'))
#解决过拟合方法1:
model.add(layers.Dropout(0.5))
model.add(layers.Dense(1,activation='sigmoid'))

model.compile(optimizer=keras.optimizers.Adam(lr=0.001),
              loss='binary_crossentropy',
              metrics=['acc'])
              
history = model.fit(x_train,y_train,epochs=10,batch_size=256,validation_data=(x_test,y_test))

实例:猫狗数据集

Jupyter Notebook

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
import numpy as np
import glob

# 查看当前路径
import os
os.getcwd()

# 获取所有图片对应的存储路径
image_filenames = glob.glob('./dataset/dc/train/*.jpg')
image_filenames[:20]

# 对路径进行乱序
image_filenames = np.random.permutation(image_filenames)

# 提取对应分类并进行标号
labels =list(map(lambda x:float(x.split('\\')[1].split('.')[0]=='cat'),image_filenames))
# 将图片路径与分类标号对应
dataset = tf.data.Dataset.from_tensor_slices((image_filenames,labels))

#图片处理函数
def _pre_read(img_filename,label):
    image = tf.io.read_file(img_filename)
    image = tf.image.decode_jpeg(image,channels=3)
    # image = tf.image.rgb_to_grayscale(image)
    image = tf.image.resize(image,(200,200))
    image = tf.reshape(image,[200,200,3])
    image = tf.image.per_image_standardization(image) #标准化
    return image, label

dataset = dataset.map(_pre_read) # map:转化
dataset = dataset.shuffle(300).repeat().batch(32) #repeat()无参数会无限循环,所以需要在fit中指定结束

# 建立模型,一般三层卷积加最大池化效果较好
model = keras.Sequential()
model.add(layers.Conv2D(64,(3,3),activation='relu',input_shape=(200,200,3)))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(64,(3,3),activation='relu'))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(64,(3,3),activation='relu'))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Flatten())
model.add(layers.Dense(64,activation='relu'))
model.add(layers.Dense(1,activation='sigmoid'))

# 配置运行模型
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['acc'])
model.fit(dataset,epochs=10,steps_per_epoch=len(image_filenames)//32,validation_data=dataset_test,validation_steps=781)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值