keras.preprocessing.image.ImageDataGenerator(featurewise_center=False,
samplewise_center=False,
featurewise_std_normalization=False,
samplewise_std_normalization=False,
zca_whitening=False,
rotation_range=0.,
width_shift_range=0.,
height_shift_range=0.,
shear_range=0.,
zoom_range=0.,
channel_shift_range=0.,
fill_mode='nearest',
cval=0.,
horizontal_flip=False,
vertical_flip=False,
rescale=None,
dim_ordering=K.image_dim_ordering())
用以生成一个batch的图像数据,支持实时数据提升。训练时该函数会无限生成数据,直到达到规定的epoch次数为止。
[lower,upper]
的列表,随机缩放的幅度,若为浮点数,则相当于[lower,upper] = [1 - zoom_range, 1+zoom_range]
fill_mode=constant
时,指定要向超出边界的点填充的值samples, width, height, channels
,‘th’下形状为(samples, channels, width, height).
该参数的默认值是Keras配置文件~/.keras/keras.json
的image_dim_ordering
值,如果你从未设置过的话,就是'th'featurewise_center
,featurewise_std_normalization
或zca_whitening
时需要此函数。augment=True
,确定要在数据上进行多少轮数据提升,默认值为1save_to_dir
时生效model.predict_generator()
和model.evaluate_generator()
等函数时会用到.save_to_dir
时生效使用.flow()
的例子
(X_train, y_train), (X_test, y_test) = cifar10.load_data()
Y_train = np_utils.to_categorical(y_train, nb_classes)
Y_test = np_utils.to_categorical(y_test, nb_classes)
datagen = ImageDataGenerator(
featurewise_center=True,
featurewise_std_normalization=True,
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
horizontal_flip=True)# compute quantities required for featurewise normalization# (std, mean, and principal components if ZCA whitening is applied)datagen.fit(X_train)# fits the model on batches with real-time data augmentation:model.fit_generator(datagen.flow(X_train, Y_train, batch_size=32),
samples_per_epoch=len(X_train), nb_epoch=nb_epoch)# here's a more "manual" examplefor e in range(nb_epoch): print 'Epoch', e
batches = 0
for X_batch, Y_batch in datagen.flow(X_train, Y_train, batch_size=32):
loss = model.train(X_batch, Y_batch)
batches += 1
if batches >= len(X_train) / 32: # we need to break the loop by hand because
# the generator loops indefinitely
break
使用.flow_from_directory(directory)
的例子
train_datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory( 'data/train',
target_size=(150, 150),
batch_size=32,
class_mode='binary')
validation_generator = test_datagen.flow_from_directory( 'data/validation',
target_size=(150, 150),
batch_size=32,
class_mode='binary')
model.fit_generator(
train_generator,
samples_per_epoch=2000,
nb_epoch=50,
validation_data=validation_generator,
nb_val_samples=800)
keras.preprocessing.sequence.pad_sequences(sequences, maxlen=None, dtype='int32')
将长为nb_samples
的序列(标量序列)转化为形如(nb_samples,nb_timesteps)
2D numpy array。如果提供了参数maxlen
,nb_timesteps=maxlen
,否则其值为最长序列的长度。其他短于该长度的序列都会在后部填充0以达到该长度。
返回形如(nb_samples,nb_timesteps)
的2D张量
keras.preprocessing.sequence.skipgrams(sequence, vocabulary_size,
window_size=4, negative_samples=1., shuffle=True,
categorical=False, sampling_table=None)
skipgrams将一个词向量下标的序列转化为下面的一对tuple:
【Tips】根据维基百科,n-gram代表在给定序列中产生连续的n项,当序列句子时,每项就是单词,此时n-gram也称为shingles。而skip-gram的推广,skip-gram产生的n项子序列中,各个项在原序列中不连续,而是跳了k个字。例如,对于句子:
“the rain in Spain falls mainly on the plain”
其 2-grams为子序列集合:
the rain,rain in,in Spain,Spain falls,falls mainly,mainly on,on the,the plain
其 1-skip-2-grams为子序列集合:
the in, rain Spain, in falls, Spain mainly, falls on, mainly the, on plain.
更多详情请参考Efficient Estimation of Word Representations in Vector Space【@BigMoyan】
negative_samples
倍)(vocabulary_size,)
的numpy array,其中sampling_table[i]
代表没有负样本或随机负样本。等于1为与正样本的数目相同 采样到该下标为i的单词的概率(假定该单词是数据库中第i常见的单词)函数的输出是一个(couples,labels)
的元组,其中:
couples
是一个长为2的整数列表:[word_index,other_word_index]
labels
是一个仅由0和1构成的列表,1代表other_word_index
在word_index
的窗口,0代表other_word_index
是词典里的随机单词。categorical
为True
,则标签将以one-hot的方式给出,即1变为[0,1],0变为[1,0]keras.preprocessing.sequence.make_sampling_table(size, sampling_factor=1e-5)
该函数用以产生skipgrams
中所需要的参数sampling_table
。这是一个长为size
的向量,sampling_table[i]
代表采样到数据集中第i常见的词的概率(为平衡期起见,对于越经常出现的词,要以越低的概率采到它)
keras.preprocessing.text.text_to_word_sequence(text,
filters=base_filter(), lower=True, split=" ")
本函数将一个句子拆分成单词构成的列表
base_filter()
,包含标点符号,制表符和换行符等字符串列表
keras.preprocessing.text.one_hot(text, n,
filters=base_filter(), lower=True, split=" ")
本函数将一段文本编码为one-hot形式的码,即仅记录词在词典中的下标。
【Tips】 从定义上,当字典长为n时,每个单词应形成一个长为n的向量,其中仅有单词本身在字典中下标的位置为1,其余均为0,这称为one-hot。【@Bigmoyan】
为了方便起见,函数在这里仅把“1”的位置,即字典中词的下标记录下来。
整数列表,每个整数是[1,n]之间的值,代表一个单词(不保证唯一性,即如果词典长度不够,不同的单词可能会被编为同一个码)。
keras.preprocessing.text.Tokenizer(nb_words=None, filters=base_filter(),
lower=True, split=" ")
Tokenizer是一个用于向量化文本,或将文本转换为序列(即单词在字典中的下标构成的列表,从1算起)的类。
text_to_word_sequence
同名参数含义相同nb_words
个单词texts_to_sequences
的生成器函数版(len(texts), nb_words)
的numpy array(len(sequences), nb_words)
的numpy array目标函数,或称损失函数,是编译一个模型必须的两个参数之一:
model.compile(loss='mean_squared_error', optimizer='sgd')
可以通过传递预定义目标函数名字指定目标函数,也可以传递一个Theano/TensroFlow的符号函数作为目标函数,该函数对每个数据点应该只返回一个标量值,并以下列两个参数为参数:
真实的优化目标函数是在各个数据点得到的损失函数值之和的均值
请参考目标实现代码获取更多信息
(nb_samples, nb_classes)
的二值序列np.expand_dims(y,-1)
(predictions - targets * log(predictions))
的均值【Tips】过一段时间(等我或者谁有时间吧……)我们将把各种目标函数的表达式和常用场景总结一下。
优化器是编译Keras模型必要的两个参数之一
model = Sequential()
model.add(Dense(64, init='uniform', input_dim=10))
model.add(Activation('tanh'))
model.add(Activation('softmax'))
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error', optimizer=sgd)
可以在调用model.compile()
之前初始化一个优化器对象,然后传入该函数(如上所示),也可以在调用model.compile()
时传递一个预定义优化器名。在后者情形下,优化器的参数将使用默认值。
# pass optimizer by name: default parameters will be usedmodel.compile(loss='mean_squared_error', optimizer='sgd')
参数clipnorm
和clipvalue
是所有优化器都可以使用的参数,用于对梯度进行裁剪.示例如下:
# all parameter gradients will be clipped to# a maximum norm of 1.sgd = SGD(lr=0.01, clipnorm=1.)
# all parameter gradients will be clipped to# a maximum value of 0.5 and# a minimum value of -0.5.sgd = SGD(lr=0.01, clipvalue=0.5)
keras.optimizers.SGD(lr=0.01, momentum=0.0, decay=0.0, nesterov=False)
随机梯度下降法,支持动量参数,支持学习衰减率,支持Nesterov动量
keras.optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=1e-06)
除学习率可调整外,建议保持优化器的其他默认参数不变
该优化器通常是面对递归神经网络时的一个良好选择
keras.optimizers.Adagrad(lr=0.01, epsilon=1e-06)
建议保持优化器的默认参数不变
keras.optimizers.Adadelta(lr=1.0, rho=0.95, epsilon=1e-06)
建议保持优化器的默认参数不变
keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08)
该优化器的默认值来源于参考文献
keras.optimizers.Adamax(lr=0.002, beta_1=0.9, beta_2=0.999, epsilon=1e-08)
Adamax优化器来自于Adam的论文的Section7,该方法是基于无穷范数的Adam方法的变体。
默认参数由论文提供
keras.optimizers.Nadam(lr=0.002, beta_1=0.9, beta_2=0.999, epsilon=1e-08, schedule_decay=0.004)
Nesterov Adam optimizer: Adam本质上像是带有动量项的RMSprop,Nadam就是带有Nesterov 动量的Adam RMSprop
默认参数来自于论文,推荐不要对默认参数进行更改。
【Tips】很快(过两天)我们会将各种优化器的算法及特点总结一下,敬请关注
内容摘自 http://keras-cn.readthedocs.io/en/latest/preprocessing/image/