python将mp3流转换为无损wav?

在我们进行语音识别的过程中,常常需要把mp3转化为无损的wav格式。
如何操作呢?
找到一个可用的模块io,声音处理模块可以参考python声音处理
import io
aud=io.BytesIO(data)
#data的格式是mp3数据的bytestring
然后可以像用文件一样使用这段流数据,之后就可以使用mp3文件转wav的模块,而不用写入到文件再读。

以下是结合pydub验证过程:
from pydub import AudioSegment ###需要安装pydub、ffmpeg
import wave
import io
#先从本地获取mp3的bytestring作为数据样本
fp=open("hello.mp3",'rb')
data=fp.read()
fp.close()
#主要部分
aud=io.BytesIO(data)
sound=AudioSegment.from_file(aud,format='mp3')
raw_data = sound._data
#写入到文件,验证结果是否正确。
l=len(raw_data)
f=wave.open("hello.wav",'wb')
f.setnchannels(1)
f.setsampwidth(2)
f.setframerate(16000)
f.setnframes(l)
f.writeframes(raw_data)
f.close()
继续阅读 »
在我们进行语音识别的过程中,常常需要把mp3转化为无损的wav格式。
如何操作呢?
找到一个可用的模块io,声音处理模块可以参考python声音处理
import io
aud=io.BytesIO(data)
#data的格式是mp3数据的bytestring
然后可以像用文件一样使用这段流数据,之后就可以使用mp3文件转wav的模块,而不用写入到文件再读。

以下是结合pydub验证过程:
from pydub import AudioSegment ###需要安装pydub、ffmpeg
import wave
import io
#先从本地获取mp3的bytestring作为数据样本
fp=open("hello.mp3",'rb')
data=fp.read()
fp.close()
#主要部分
aud=io.BytesIO(data)
sound=AudioSegment.from_file(aud,format='mp3')
raw_data = sound._data
#写入到文件,验证结果是否正确。
l=len(raw_data)
f=wave.open("hello.wav",'wb')
f.setnchannels(1)
f.setsampwidth(2)
f.setframerate(16000)
f.setnframes(l)
f.writeframes(raw_data)
f.close()
收起阅读 »

pytorch v0.3.0修复Bug汇总

0.3_.jpg

Torch
  • 修复CUDA延迟初始化,以便在调用时不触发torch.manual_seed(而是在CUDA初始化时调用排队并运行)


张量
  • 如果x是2D,x[[0, 3],]则需要触发高级索引。尾随的逗号不再需要,你可以做x[[0, 3]]
  • x.sort(descending=True)用于错误地拒绝张量。修正了在参数检查逻辑中允许这个错误。
  • numpy输入的张量构造函数: torch.DoubleTensor(np.array([0,1,2], dtype=np.float32))火炬现在将数组的内容复制到适当类型的存储中。如果类型匹配,它将共享底层数组(no-copy),用等价的语义来用另一个张量初始化一个张量。在CUDA上,torch.cuda.FloatTensor(np.random.rand(10,2).astype(np.float32))现在将通过复制工作。
  • ones_like而zeros_like现在创建相同的设备上张量与原张量
  •  torch.multinomial在CPU上将重新形成prob_dist就地输入。修正了这个问题,以确保prob_dist调用后输入的形状不变multinomial
  • expand并expand_as允许扩展一个空张量到另一个空张量
  • 当[..., None, ...]被赋予时(即,在指定索引中的新轴放置),PyTorch与NumPy具有不同的行为。在所有情况下这与NumPy一致。
  • 修复指数分布实现从不采样无穷大 - cuRAND返回(0,1]
  • torch的.HalfTensor支持numpy()和torch.from_numpy
  • 添加额外的大小检查torch.scatter
  • 修复torch.tril和torch.triuGPU上的存储偏移张量(将返回不正确的结果)。
  • 修复CUDA qr分解中的内存泄漏
  • 修复THCUNN内核中的流识别问题
  • 修复kwargs解析torch.topk
  • 固定random_在CPU(以前的最大值为2 ^ 32)的DoubleTensor和LongTensor
  • 修正ZeroDivisionError: float division by zero打印某些张量时
  • torch.gels当m > n在CPU上发生截断错误并返回不正确的结果时。固定。
  • 在tensor.numpy()中添加一个检查,检查是否没有传递位置参数
  • 在将张量移至CUDA固定内存之前,添加了一个检查以确保它是 contiguous
  • any并all在CPU上的空张量(以前出错)
  • 修复symeig大型矩阵的CUDA。缺点是没有足够的空间分配给工作区,导致一些未定义的行为。
  • 改进的数值稳定性torch.var,并torch.std通过使用维尔福德的算法
  • 随机数生成器返回uniform具有不一致边界的样本(在cpu实现中不一致并运行到cublas bug)。现在,所有uniform采样的数字将[0, 1)在所有类型和设备的范围内返回
  • 修复torch.svd大型CUDA张量中的不段错误(修正了岩浆绑定中的溢出错误)
  • 允许空索引张量index_select(而不是错误)
  • 在此之前eigenvector=False,symeig为特征向量返回一些未知值。现在我们把它们归零。


sparse

*   修复了在cadd中稀疏张量的合并coalesced计算错误
*   修复.type()不转换索引张量。
*   修复在角落情况下GPU上的稀疏张量聚合

autograd

*   修复了在使用requires_grad = False的叶变量上向后调用时的崩溃问题
*   修正type()非默认GPU输入的变量。
*   当torch.norm返回时0.0,渐变是NaN。我们现在使用梯度0.0,所以梯度是0.0。
*   使用高级索引和更高阶梯度修正正确性问题
*   torch.prod由于类型错误的原因,GPU的落后是失败的。
*   先进的变量索引现在允许索引是一个LongTensor支持的变量
*   Variable.cuda()和Tensor.cuda()在kwargs选项中是一致的

Optim

*   torch.optim.lr_scheduler现在默认导入。

NN

*   现在支持从nn.Module的转发函数返回字典(用于引发错误)
*   什么时候register_buffer("foo", ...)被调用,并且self.foo已经存在,那么不是默默地失败,现在引发一个KeyError
*   修复了缺少_data_ptrs属性的旧RNN/LSTM检查点的加载。
*   nn.Embedding使用该max_norm选项时出现严重错误。这现在已经修复了。
*   当使用该max_norm选项时,传入的索引被写入(由底层实现)。为了解决这个问题,将索引的克隆传递给renorm内核。
*   F.affine_grid现在可以采取非连续的投入
*   EmbeddingBag现在可以接受1D和2D输入。
*   在CuDNN BatchNorm中,批次大于131070的CuDNN错误解决方法
*   修复nn.init.orthogonal在行<cols时正确返回正交向量
*   如果BatchNorm总共只有1每个通道的值,则在训练模式下产生错误。
*   使cuDNN绑定尊重当前的cuda流(以前引起不连贯的错误)
*   当gradOutput是零跨度张量时,修复grid_sample
*   当反射填充超出张量界限时修复分段错误。
*   如果LogSoftmax只有一个元素,-inf则返回。现在这个正确的返回0.0
*   修复pack_padded_sequence接受任意大小的输入(不只是3D输入)
*   检测cuDNN RNN flatten_parameters中的指针别名,并避免该路径。
*   固定ELU更高阶梯度时适用
*   解决半精确度的CuDNN RNN错误
*   防止数值的问题poisson_nll_loss时,log_input=False通过增加一个小小量

分布式和多GPU

*   只允许kwargs输入DataParallel。这曾经失败:n = nn.DataParallel(Net()); out = n(input=i)
*   DistributedDataParallel在python2中正确计算num_samples
*   当使用每个进程1-GPU时,修复DistributedDataParallel的情况。
*   修复了DataParallel以指定不包含GPU-0的GPU
*   分布式数据并行的退出不会出错,守护进程标志被设置。
*   修复DistributedDataParallel中的一个错误,当模型没有时buffers(以前引起非连贯错误)
*   修复__get_state__功能DistributedDataParallel(没有返回)
*   当GIL和CudaFreeMutex互相挨饿时,修复NCCL绑定中的死锁

其他

*   model.zoo.load_url现在首先尝试使用requests library,然后回落到urllib
*   解决错误,当default_collat​​e传递的集合numpy.str_
继续阅读 »
0.3_.jpg

Torch
  • 修复CUDA延迟初始化,以便在调用时不触发torch.manual_seed(而是在CUDA初始化时调用排队并运行)


张量
  • 如果x是2D,x[[0, 3],]则需要触发高级索引。尾随的逗号不再需要,你可以做x[[0, 3]]
  • x.sort(descending=True)用于错误地拒绝张量。修正了在参数检查逻辑中允许这个错误。
  • numpy输入的张量构造函数: torch.DoubleTensor(np.array([0,1,2], dtype=np.float32))火炬现在将数组的内容复制到适当类型的存储中。如果类型匹配,它将共享底层数组(no-copy),用等价的语义来用另一个张量初始化一个张量。在CUDA上,torch.cuda.FloatTensor(np.random.rand(10,2).astype(np.float32))现在将通过复制工作。
  • ones_like而zeros_like现在创建相同的设备上张量与原张量
  •  torch.multinomial在CPU上将重新形成prob_dist就地输入。修正了这个问题,以确保prob_dist调用后输入的形状不变multinomial
  • expand并expand_as允许扩展一个空张量到另一个空张量
  • 当[..., None, ...]被赋予时(即,在指定索引中的新轴放置),PyTorch与NumPy具有不同的行为。在所有情况下这与NumPy一致。
  • 修复指数分布实现从不采样无穷大 - cuRAND返回(0,1]
  • torch的.HalfTensor支持numpy()和torch.from_numpy
  • 添加额外的大小检查torch.scatter
  • 修复torch.tril和torch.triuGPU上的存储偏移张量(将返回不正确的结果)。
  • 修复CUDA qr分解中的内存泄漏
  • 修复THCUNN内核中的流识别问题
  • 修复kwargs解析torch.topk
  • 固定random_在CPU(以前的最大值为2 ^ 32)的DoubleTensor和LongTensor
  • 修正ZeroDivisionError: float division by zero打印某些张量时
  • torch.gels当m > n在CPU上发生截断错误并返回不正确的结果时。固定。
  • 在tensor.numpy()中添加一个检查,检查是否没有传递位置参数
  • 在将张量移至CUDA固定内存之前,添加了一个检查以确保它是 contiguous
  • any并all在CPU上的空张量(以前出错)
  • 修复symeig大型矩阵的CUDA。缺点是没有足够的空间分配给工作区,导致一些未定义的行为。
  • 改进的数值稳定性torch.var,并torch.std通过使用维尔福德的算法
  • 随机数生成器返回uniform具有不一致边界的样本(在cpu实现中不一致并运行到cublas bug)。现在,所有uniform采样的数字将[0, 1)在所有类型和设备的范围内返回
  • 修复torch.svd大型CUDA张量中的不段错误(修正了岩浆绑定中的溢出错误)
  • 允许空索引张量index_select(而不是错误)
  • 在此之前eigenvector=False,symeig为特征向量返回一些未知值。现在我们把它们归零。


sparse

*   修复了在cadd中稀疏张量的合并coalesced计算错误
*   修复.type()不转换索引张量。
*   修复在角落情况下GPU上的稀疏张量聚合

autograd

*   修复了在使用requires_grad = False的叶变量上向后调用时的崩溃问题
*   修正type()非默认GPU输入的变量。
*   当torch.norm返回时0.0,渐变是NaN。我们现在使用梯度0.0,所以梯度是0.0。
*   使用高级索引和更高阶梯度修正正确性问题
*   torch.prod由于类型错误的原因,GPU的落后是失败的。
*   先进的变量索引现在允许索引是一个LongTensor支持的变量
*   Variable.cuda()和Tensor.cuda()在kwargs选项中是一致的

Optim

*   torch.optim.lr_scheduler现在默认导入。

NN

*   现在支持从nn.Module的转发函数返回字典(用于引发错误)
*   什么时候register_buffer("foo", ...)被调用,并且self.foo已经存在,那么不是默默地失败,现在引发一个KeyError
*   修复了缺少_data_ptrs属性的旧RNN/LSTM检查点的加载。
*   nn.Embedding使用该max_norm选项时出现严重错误。这现在已经修复了。
*   当使用该max_norm选项时,传入的索引被写入(由底层实现)。为了解决这个问题,将索引的克隆传递给renorm内核。
*   F.affine_grid现在可以采取非连续的投入
*   EmbeddingBag现在可以接受1D和2D输入。
*   在CuDNN BatchNorm中,批次大于131070的CuDNN错误解决方法
*   修复nn.init.orthogonal在行<cols时正确返回正交向量
*   如果BatchNorm总共只有1每个通道的值,则在训练模式下产生错误。
*   使cuDNN绑定尊重当前的cuda流(以前引起不连贯的错误)
*   当gradOutput是零跨度张量时,修复grid_sample
*   当反射填充超出张量界限时修复分段错误。
*   如果LogSoftmax只有一个元素,-inf则返回。现在这个正确的返回0.0
*   修复pack_padded_sequence接受任意大小的输入(不只是3D输入)
*   检测cuDNN RNN flatten_parameters中的指针别名,并避免该路径。
*   固定ELU更高阶梯度时适用
*   解决半精确度的CuDNN RNN错误
*   防止数值的问题poisson_nll_loss时,log_input=False通过增加一个小小量

分布式和多GPU

*   只允许kwargs输入DataParallel。这曾经失败:n = nn.DataParallel(Net()); out = n(input=i)
*   DistributedDataParallel在python2中正确计算num_samples
*   当使用每个进程1-GPU时,修复DistributedDataParallel的情况。
*   修复了DataParallel以指定不包含GPU-0的GPU
*   分布式数据并行的退出不会出错,守护进程标志被设置。
*   修复DistributedDataParallel中的一个错误,当模型没有时buffers(以前引起非连贯错误)
*   修复__get_state__功能DistributedDataParallel(没有返回)
*   当GIL和CudaFreeMutex互相挨饿时,修复NCCL绑定中的死锁

其他

*   model.zoo.load_url现在首先尝试使用requests library,然后回落到urllib
*   解决错误,当default_collat​​e传递的集合numpy.str_ 收起阅读 »

Pytorch使用PIL和Numpy将单张图片转为Pytorch张量

这里会讲解一下如何通过PIL读取单张图片将其转换为Pytorch张量
#!/usr/bin/python
# -*- coding: UTF-8 -*-

from PIL import Image
import numpy as np
import torch

pil_img = Image.open('/Users/songlu/Desktop/code.jpg')
img = np.array(pil_img)
print torch.from_numpy(img)
继续阅读 »
这里会讲解一下如何通过PIL读取单张图片将其转换为Pytorch张量
#!/usr/bin/python
# -*- coding: UTF-8 -*-

from PIL import Image
import numpy as np
import torch

pil_img = Image.open('/Users/songlu/Desktop/code.jpg')
img = np.array(pil_img)
print torch.from_numpy(img)
收起阅读 »

pytorch官网,pytorch官方网站

中文网址为:Pytorch-基于python且具备强大GPU加速的张量和动态神经网络。  里面包含pytorch中文文档,pytorch视频教程,pytorch入门教程等等。
bg-4.png

纯英文官方网站为:http://pytorch.org/,提供文档和教程
继续阅读 »
中文网址为:Pytorch-基于python且具备强大GPU加速的张量和动态神经网络。  里面包含pytorch中文文档,pytorch视频教程,pytorch入门教程等等。
bg-4.png

纯英文官方网站为:http://pytorch.org/,提供文档和教程 收起阅读 »

Pytorch如何更新版本,如何卸载Pytorch,使用pip,conda更新卸载Pytorch

今天我们主要汇总如何使用使用ubuntu,CentOS,Mac更新Pytorch和torchvision,本教程只汇集如何使用pip,conda更新以及卸载Pytorch和torchvision,希望对您有所帮助!
201708132118329912.jpg

最近Pytorch从v0.1.12更新到了v0.2,支持了很多方法,如果大家想知道详细内容可以去Pytorch v0.2版本发布--高阶梯度,分布式PyTorch,广播,高级索引,新图层等 查看,好的,我们今天主要讲解如何升级Pytorch以及如何卸载Pytorch。

一、更新Pytorch和torchvision

我们主要讲解如何所以pip,conda更新Pytorch和torchvision,这样你就可以使用ubuntu,CentOS,Mac更新Pytorch和torchvision

1、使用Pip更新Pytorch和torchvision
# 列举pip当前可以更新的所有安装包 
pip list --outdated --format=legacy
# 更新pytorch和torchvision安装包
pip install --upgrade pytorch torchvision
 
2、使用conda更新Pytorch和torchvision
# 建议将其添加soumith为您的Anaconda(或Miniconda)的源服务器 
conda config --add channels soumith
# 更新pytorch和torchvision安装包
conda update pytorch torchvision

 
3、卸载Pytorch重新安装

二、如何安装指定版本Pytorch
使用conda安装指定版本
# 比如我们安装 v0.1.10 
conda install pytorch=0.1.10 -c soumith

使用pip安装指定版本
pip install pytorch==0.1.10

三、卸载Pytorch
1、使用conda卸载Pytorch
conda uninstall pytorch 
conda uninstall libtorch

2、使用pip卸载Pytorch
pip uninstall torch
原文参考:https://ptorch.com/news/37.html
继续阅读 »
今天我们主要汇总如何使用使用ubuntu,CentOS,Mac更新Pytorch和torchvision,本教程只汇集如何使用pip,conda更新以及卸载Pytorch和torchvision,希望对您有所帮助!
201708132118329912.jpg

最近Pytorch从v0.1.12更新到了v0.2,支持了很多方法,如果大家想知道详细内容可以去Pytorch v0.2版本发布--高阶梯度,分布式PyTorch,广播,高级索引,新图层等 查看,好的,我们今天主要讲解如何升级Pytorch以及如何卸载Pytorch。

一、更新Pytorch和torchvision

我们主要讲解如何所以pip,conda更新Pytorch和torchvision,这样你就可以使用ubuntu,CentOS,Mac更新Pytorch和torchvision

1、使用Pip更新Pytorch和torchvision
# 列举pip当前可以更新的所有安装包 
pip list --outdated --format=legacy
# 更新pytorch和torchvision安装包
pip install --upgrade pytorch torchvision
 
2、使用conda更新Pytorch和torchvision
# 建议将其添加soumith为您的Anaconda(或Miniconda)的源服务器 
conda config --add channels soumith
# 更新pytorch和torchvision安装包
conda update pytorch torchvision

 
3、卸载Pytorch重新安装

二、如何安装指定版本Pytorch
使用conda安装指定版本
# 比如我们安装 v0.1.10 
conda install pytorch=0.1.10 -c soumith

使用pip安装指定版本
pip install pytorch==0.1.10

三、卸载Pytorch
1、使用conda卸载Pytorch
conda uninstall pytorch 
conda uninstall libtorch

2、使用pip卸载Pytorch
pip uninstall torch
原文参考:https://ptorch.com/news/37.html 收起阅读 »

如何查看自己的电脑/服务器支持CUDA(torch.cuda.is_available)

CUDA,是显卡厂商NVIDIA推出的运算平台,在Pytorch中我们会使用到CUDA,如何查看我们的服务器是否支持CUDA呢?其实很简单:
import torch
print torch.cuda.is_available
if torch.cuda.is_available():
print "support"
else:
print "not support"
这样就可以知道自己的电脑是否支持CUDA了:
屏幕快照_2017-07-30_下午7.04_.10_.png
继续阅读 »
CUDA,是显卡厂商NVIDIA推出的运算平台,在Pytorch中我们会使用到CUDA,如何查看我们的服务器是否支持CUDA呢?其实很简单:
import torch
print torch.cuda.is_available
if torch.cuda.is_available():
print "support"
else:
print "not support"
这样就可以知道自己的电脑是否支持CUDA了:
屏幕快照_2017-07-30_下午7.04_.10_.png
收起阅读 »

Python如何提取CSS/JS/IMG的名称,Pytorch如何使用split

在我们进行爬虫或者其他操作中,常常会需要获取CSS/JS/IMG的名称,比如说<link href="http://www.ptorch.com/styles/css/css.css">
 

接下来我们开始做一下:
a='http://www.ptorch.com/styles/css/css.css'
x= a.split('/')
print(x)
print len(x)
print x[len(x)-1]
输入结果如下:
屏幕快照_2017-07-13_下午1.31_.08_.png
继续阅读 »
在我们进行爬虫或者其他操作中,常常会需要获取CSS/JS/IMG的名称,比如说<link href="http://www.ptorch.com/styles/css/css.css">
 

接下来我们开始做一下:
a='http://www.ptorch.com/styles/css/css.css'
x= a.split('/')
print(x)
print len(x)
print x[len(x)-1]
输入结果如下:
屏幕快照_2017-07-13_下午1.31_.08_.png
收起阅读 »

pytorch保存模型和导入模型,torch.load出错是什么原因?

Torch使用save都能成功,但是load不能成功是什么原因?
22.png

接下来我们看一下pytorch保存模型和导入模型
 
# 保存和加载整个模型
torch.save(model_object, 'model.pkl')
model = torch.load('model.pkl')
# 仅保存和加载模型参数(推荐使用)
torch.save(model_object.state_dict(), 'params.pkl')
model_object.load_state_dict(torch.load('params.pkl'))


 
继续阅读 »
Torch使用save都能成功,但是load不能成功是什么原因?
22.png

接下来我们看一下pytorch保存模型和导入模型
 
# 保存和加载整个模型
torch.save(model_object, 'model.pkl')
model = torch.load('model.pkl')
# 仅保存和加载模型参数(推荐使用)
torch.save(model_object.state_dict(), 'params.pkl')
model_object.load_state_dict(torch.load('params.pkl'))


  收起阅读 »

PyTorch中如何使用指定的GPU

PyTorch默认使用从0开始的GPU,如果GPU0正在运行程序,需要指定其他GPU。

hero.png


有如下两种方法来指定需要使用的GPU。
  • 使用CUDA_VISIBLE_DEVICES,类似tensorflow指定GPU的方法。
  • 直接终端中设定:
    CUDA_VISIBLE_DEVICES=1 python my_script.py
  • python代码中设定:
    import osos.environ["CUDA_VISIBLE_DEVICES"] = "2"
  • 使用函数 set_device,该函数见 pytorch-master\torch\cuda\__init__.py。
    import torchtorch.cuda.set_device(id)

 
不过官方建议使用CUDA_VISIBLE_DEVICES,不建议使用 set_device 函数。
继续阅读 »
PyTorch默认使用从0开始的GPU,如果GPU0正在运行程序,需要指定其他GPU。

hero.png


有如下两种方法来指定需要使用的GPU。
  • 使用CUDA_VISIBLE_DEVICES,类似tensorflow指定GPU的方法。
  • 直接终端中设定:
    CUDA_VISIBLE_DEVICES=1 python my_script.py
  • python代码中设定:
    import osos.environ["CUDA_VISIBLE_DEVICES"] = "2"
  • 使用函数 set_device,该函数见 pytorch-master\torch\cuda\__init__.py。
    import torchtorch.cuda.set_device(id)

 
不过官方建议使用CUDA_VISIBLE_DEVICES,不建议使用 set_device 函数。 收起阅读 »