如何读取Google开源的audioset的tfrecord文件

谷歌前段时间开源的audioset可以说是音频届的imagenet了,拥有200多万的音频和500多个分类(截止2017年3月)。官方下载地址点这里。官方提供了两种数据获取方式:一种是提供音频字典信息,由自己下载相关youtube音频;另一种以1Hz采样的128维音频特征数据,tfrecord格式数据。

那么,这些tfrecord格式的数据便可按下面的方式来读取。

import numpy as np
import tensorflow as tf

sess = tf.InteractiveSession()

filename = '2a.tfrecord'
filename_queue = tf.train.string_input_producer([filename])  # 添加队列
reader = tf.TFRecordReader()
_, serialized_example = reader.read(filename_queue)
contexts, features = tf.parse_single_sequence_example(
serialized_example,
context_features={
"video_id": tf.FixedLenFeature([], tf.string),
"labels": tf.VarLenFeature(tf.int64)
},
sequence_features={
'audio_embedding': tf.FixedLenSequenceFeature([], dtype=tf.string)
})

embedding_0 = tf.decode_raw(features['audio_embedding'], tf.uint8)  # 转换格式
embedding = tf.reshape(embedding_0, [10, 128])  # 指定embedding的结构
batch = tf.train.shuffle_batch(
[embedding], batch_size=30, capacity=2000, min_after_dequeue=1000)

tf.global_variables_initializer().run()  # 初始化变量
tf.train.start_queue_runners(sess=sess)  # 启动队列

print(embedding_0.eval().shape)  # 验证embedding的shape
audio_feature = batch.eval()  # 读取数据

Mac上iterm2配置rz、sz从远程服务器上传下载文件

首先,下载并安装iterm2:http://www.iterm2.com/downloads.html

接着,安装rzsz

brew install lrzsz

然后,保存iterm2-send-zmodem.sh 和 iterm2-recv-zmodem.sh 脚本到/usr/local/bin/ :

git clone https://github.com/mmastrac/iterm2-zmodem.git
cd iterm2-zmodem/
mv iterm2-recv-zmodem.sh /usr/local/bin/
mv iterm2-send-zmodem.sh /usr/local/bin/

最后,在iterm2的Triggers里添加如下两条规则:
Regular expression: rz waiting to receive.\*\*B0100
Action: Run Silent Coprocess
Parameters: /usr/local/bin/iterm2-send-zmodem.sh
Instant: checked


Regular expression: \*\*B00000000000000
Action: Run Silent Coprocess
Parameters: /usr/local/bin/iterm2-recv-zmodem.sh
Instant: checked

配置完成。另外,远程服务端也需要安装lrzsz。

用tensorflow解码图片

用深度学习进行图片识别时,往往需要将各原始图片转换为相同的尺寸,并且数字化。其实,tensorflow本身就能非常方便地实现这个过程。

import tensorflow as tf

"""读取图片文件"""
file1 = tf.read_file('image.jpg')

"""解码图片,png格式用tf.image.decode_png,
channels=3表示RGB,1表示灰度"""
image = tf.image.decode_jpeg(file1, channels=3)

"""调整图片大小,size=[new_height, new_width]"""
image = tf.image.resize_images(image, size=[32,32])

"""转化图片转化为float32类型,并缩放到[0,1]之间,
也可使用 tf.cast(image, tf.float32)/255(一般图片类型最大值为255)"""
image = tf.image.convert_image_dtype(image, tf.float32)

# 在会话中运行
sess = tf.Session()
sess.run(image)

tensorflow实现mnist手写数字识别

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

# 载入数据
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

# 定义tensorflow结构
x = tf.placeholder(tf.float32, [None, 784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y_ = tf.placeholder(tf.float32, [None, 10])

"""激励函数softmax和loss函数交叉熵"""
y = tf.nn.softmax(tf.matmul(x, W) + b)
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), axis=1))

"""或者用tf内置的loss函数,注意tf.nn.softmax_cross_entropy_with_logits已内置softmax变换"""
# y_l = tf.matmul(x,W) + b
# cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y_l))

"""用梯度下降提升"""
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

"""初始化全部变量"""
init = tf.global_variables_initializer()

# 训练
sess = tf.Session()
sess.run(init)

"""进行600次更新,SGD每批次输入100个样本"""
for i in range(600):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
# 评估模型,每20步打印准确率
if i % 20 == 0:
"""tf.argmax返回最大值的index,tf.equal比较是否相等"""
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
"""转换为数字并求平均,如[True,False,False,True]转化为[1,0,0,1],平均值为0.5"""
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
"""用测试数据计算,并打印准确率"""
print(i, sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))

sess.close()

tensorflow的GPU配置

以Ubuntu系统为例:

1、首先安装Cuda Toolkit
下载地址:https://developer.nvidia.com/cuda-downloads
安装步骤:

# Install repository meta-data:
sudo dpkg -i cuda-repo-<distro>_<version>_<architecture>.deb
# Update the Apt repository cache:
sudo apt-get update
# Install CUDA:
sudo apt-get install cuda

2、安装cuDNN
下载地址:https://developer.nvidia.com/cudnn
配置步骤(假设Cuda toolkit安装在/usr/local/cuda):

tar xvzf cudnn-8.0-linux-x64-v5.1-ga.tgz
sudo cp -P cuda/include/cudnn.h /usr/local/cuda/include
sudo cp -P cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

3、安装其他依赖

sudo apt-get install libcupti-dev

4、安装支持gpu版本的tensorflow

pip install tensorflow-gpu