先来看看计算机视觉的应用:
【Ref】
[1] 中国计算机视觉的前途在哪?机器视觉工程师又何去何从?
[2] 《计算机视觉-算法与应用》
在Linux环境下编程需要注意到文件的格式问题,例如文件xor_keras.py,若其编码格式为dos,则在Linux环境下执行时会出现如下错误:
即解译错误,找不到文件或路径,这是xor_keras.py的编码格式为dos引起的,可以在vim编辑器通过下面的命令来查询文件的格式:
:set ff?
即此文件的格式为:
通过下面的命令将文件的编码格式修改为unix:
:set ff=unix
然后存盘退出即可,再运行xor_keras.py文件:
#当file.py文件具有可执行的权限时(x),同时.py文件包含了Python的路径,如:#!/usr/bin/python2.7
#此时可以用下面两种方式来执行
./xor_keras.py
python xor_keras.py
运行结果如下:
【Ref】
[1] 执行脚本出现bin/bash: bad interpreter: No such file or directory
[2] vim set 功能设定
Keras是一个高层神经网络API,由纯Python编写而成并基Tensorflow、Theano及CNTK后端;Keras为支持快速实验而生,具有以下特点:
Keras适用的Python版本为:Python 2.7-3.6
Keras的核心数据结构是“模型”,它是一种组织网络层的方式;Keras主要的模型有Sequential,Functional;Sequential是一系列网络层按顺序构成的栈,是单输入单输出的,所以编译速度快,操作比较简单;Functional为函数式模型,为多输入多输出模型。
优化方法(optimizers)是编译Keras模型必要的两个参数之一,可以在调用model.compile()之前初始化优化器对象:
sgd = optimizers.SGD(lr=0.01,decay=1e-6,momentum=0.9,nesterov=True)
model.compile(loss='mean_Squared_error',optimizer=sgd)
也可以在调用model.compile()时传递一个预定义优化器名,此时优化器的参数使用默认值:
# pass optimizer by name: default parameters will be uesed
model.compile(loss='mean_squared_error',optimizer='sgd')
参数clipnorm和clipvalue是所有优化器都可以使用的参数,用于对梯度进行裁剪。 SGD,随机梯度下降法,支持运量参数,支持学习衰减率,支持Nesterov运量;参数如下:
自带的有以下几种:
1) SGD,随机梯度下降法,用法例如:
keras.optimizers.SGD(lr=0.01,momentum=0.0,decay=0.0,nesterov=False)
2) RMSprop,此优化器是对递归神经网络的一个较好选择,除学习率可调整外,其它参数建议保持默认:
keras.optimizers.RMSprop(lr=0.001,rho=0.9,epsilon=1e-06)
参数rho大于等于0的浮点数,epsilon大于等于0的小浮点数,防止除0错误
3)Adagrad,建议保持默认参数:
keras.optimizers.Adagrad(lr=0.01,epsilon=1e-06)
4) Adadelta,建议保持默认参数:
keras.optimizer.Adadelta(lr=1.0,rho=0.95,epsilon=1e-6)
5) Adam,优化器的默认值来源于参考文献[4]:
keras.optimizers.Adam(lr=0.001,beta_1=0.9,beta_2=0.999,epsilon=1e-08)
参数 beta_1/beta_2: 浮点数,0<beta<1,通常很接近1
6)TFOptimizer,TF(Tensorflow)优化器的包装器:
keras.optimizers.TFOpitimizer(optimizer)
Sequential模型的简单Demo如下:
#Getting started with the Keras Sequential model
#example one: MLP for binary classification
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout
# Generate dummy data
x_train = np.random.random((1000, 20))
y_train = np.random.randint(2, size=(1000, 1))
x_test = np.random.random((100, 20))
y_test = np.random.randint(2, size=(100, 1))
# Stacking layer is as easy as .add()
model = Sequential()
model.add(Dense(64, input_dim=20, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))
# Configure its learning process with .compile()
model.compile(loss='binary_crossentropy',optimizer='rmsprop',metrics=['accuracy'])
model.fit(x_train, y_train,epochs=20,batch_size=128)
score = model.evaluate(x_test, y_test, batch_size=128)
运行结果如下:
简单回归模型:
#-*-coding:utf-8-*-
# example two: Regressor
import numpy as np
np.random.seed(1337) # for reproducibility
from keras.models import Sequential
from keras.layers import Dense
import matplotlib.pyplot as plt
# create some data
X = np.linspace(-1, 1, 200)
np.random.shuffle(X) # randomize the data
Y = 0.5 * X + 2 + np.random.normal(0, 0.05, (200, ))
# plot data
plt.scatter(X, Y)
plt.show()
X_train, Y_train = X[:160], Y[:160] # first 160 data points
X_test, Y_test = X[160:], Y[160:] # last 40 data points
# build a neural network from the 1st layer to the last layer
model = Sequential()
model.add(Dense(units=1, input_dim=1))
# choose loss function and optimizing method
model.compile(loss='mse', optimizer='sgd')
# training
print('Training -----------')
for step in range(301):
cost = model.train_on_batch(X_train, Y_train)
if step % 100 == 0:
print('train cost: ', cost)
# test
print('\nTesting ------------')
cost = model.evaluate(X_test, Y_test, batch_size=40)
print('test cost:', cost)
W, b = model.layers[0].get_weights()
print('Weights=', W, '\nbiases=', b)
# plotting the prediction
Y_pred = model.predict(X_test)
plt.scatter(X_test, Y_test)
plt.plot(X_test, Y_pred)
plt.show()
运行结果:
【Ref】
[1] Keras Documentation
[2] Keras中文文档
[3] MorvanZhou tutorials
[4] Adam - A Method for Stochastic Optimization
最近做PPT要插入视频,从百度网盘下载的Camtasia Recorder录制的视频太大,需要压缩下,在同事的推荐下了解到了FFmpeg这个工具,用来做多媒体视频处理比较方便;例如输入的视频为kcf.avi(Camtasia Recorder生成的视频格式),将其压缩为kcf.mp4,具体的命令为:
ffmpeg -i kcf.avi -c:v libx264 -preset veryslow -crf 18 -c:a copy kcf.mp4
1.编码格式为H.264,为目前主流的视频格式;
2.-crf控制转码,18~28比较合理,18被视为“视觉无损”的。
或者直接用默认的格式,兼容性会好些:
ffmpeg -i input_video.avi output_video.mp4
ffmpeg -i input_video.avi output_video.asf
播放可以用:
ffplay input_video.xxx
【Ref】
[1] FFmpeg Download
[2] FFmpeg视频转码技巧之-crf参数
Time 2017.08.23~2017.9.23
做事做人要把眼光放长远些,不要太看重眼前利益,用心把事情做好,做完美更重要!
So, Let's do it!
Linux下在cp命令的用法:
cp [option]... [-T] source_dir dest_dir
使用时,遇到以下错误提示:
cp: omitting directory ***
错误,这是因为 source_dir下含有子目录,需要加“-r” option,即copy directories recursively :
cp -r source_dir dest_dir