Numpy 有这个辅助函数np.empty,它将:
返回给定形状和类型的新数组,而不初始化条目。
当我想使用tf.concat创建张量时,我发现它非常有用,因为:
输入张量的维数必须匹配,除axis之外的所有维数必须相等。
因此,从一个具有预期形状的空张量开始会派上用场。有没有办法在张量流中实现这一点?
[编辑]
为什么我想要这个的简化示例
netInput = np.empty([0, 4])
netTarget = np.empty([0, 4])
inputWidth = 2
for step in range(data.shape.as_list()[-2]-frames_width-1):
netInput = tf.concat([netInput, data[0, step:step + frames_width, :]], -2)
target = tf.concat([target, data[0, step + frames_width + 1:step + frames_width + 2, :]], -2)
Run Code Online (Sandbox Code Playgroud)
在这个例子中,如果 netInput 或 netTarget 被初始化,我将把一个额外的例子与该初始化连接起来。并用第一个值初始化它们,我需要破解循环。没什么市长,我只是想知道是否有一种“tensorflow”的方式来解决这个问题。
PEP 8规定:
导入总是放在文件的顶部,就在任何模块注释和文档字符串之后,以及模块全局变量和常量之前。
但是,如果我正在导入的类/方法/函数仅由子进程使用,那么在需要时进行导入肯定会更有效?我的代码基本上是:
p = multiprocessing.Process(target=main,args=(dump_file,))
p.start()
p.join()
print u"Process ended with exitcode: {}".format(p.exitcode)
if os.path.getsize(dump_file) > 0:
blc = BugLogClient(listener='http://21.18.25.06:8888/bugLog/listeners/bugLogListenerREST.cfm',appName='main')
blc.notifyCrash(dump_file)
Run Code Online (Sandbox Code Playgroud)
main() 是主要的应用程序。此函数需要大量导入才能运行,并且会占用一些 ram 空间 (+/- 35MB)。由于应用程序在另一个进程中运行,因此在 PEP 8 之后进行了两次导入(一次由父进程执行,另一次由子进程执行)。还应该注意的是,这个函数应该只被调用一次,因为父进程正在等待查看应用程序是否崩溃并留下退出代码(感谢faulthandler)。所以我在 main 函数中对导入进行了编码,如下所示:
def main(dump_file):
import shutil
import locale
import faulthandler
from PySide.QtCore import Qt
from PySide.QtGui import QApplication, QIcon
Run Code Online (Sandbox Code Playgroud)
代替:
import shutil
import locale
import faulthandler
from PySide.QtCore import Qt
from PySide.QtGui import QApplication, QIcon
def main(dump_file):
Run Code Online (Sandbox Code Playgroud)
是否有一种“标准”方式来处理使用多处理完成的导入?
PS:我看过这个姐妹的问题
我正在使用Nsynth dataset构建网络。它有大约 22 Gb 的数据。现在我正在加载所有内容,RAM但这会带来一些(明显的)问题。
这是一个音频数据集,我想对信号进行窗口化并生成更多示例来更改跃点大小,但是因为我没有无限量的数据,RAM所以在用完它之前我可以做的事情很少(我'我实际上只使用数据集的一个很小的子集,不要告诉谷歌我是怎么生活的)。
这是我现在正在使用的一些代码:
代码:
def generate_audio_input(audio_signal, window_size):
audio_without_silence_at_beginning_and_end = trim_silence(audio_signal, frame_length=window_size)
splited_audio = windower(audio_without_silence_at_beginning_and_end, window_size, hop_size=2048)
return splited_audio
start = time.time()
audios = StrechableNumpyArray()
window_size = 5120
pathToDatasetFolder = 'audio/test'
time_per_loaded = []
time_to_HD = []
for file_name in os.listdir(pathToDatasetFolder):
if file_name.endswith('.wav'):
now = time.time()
audio, sr = librosa.load(pathToDatasetFolder + '/' + file_name, sr=None)
time_to_HD.append(time.time()-now)
output = generate_audio_input(audio, window_size)
audios.append(np.reshape(output, (-1)))
time_per_loaded.append(time.time()-now)
audios = audios.finalize()
audios = np.reshape(audios, …Run Code Online (Sandbox Code Playgroud) 我已经使用了tensorflow一段时间了。一开始我有这样的东西:
def myModel(training):
with tf.scope_variables('model', reuse=not training):
do model
return model
training_model = myModel(True)
validation_model = myModel(False)
Run Code Online (Sandbox Code Playgroud)
主要是因为我从一些MOOC开始,使我很难做到这一点。但是他们也没有使用TFRecords或Queues。而且我不知道为什么要使用两个单独的模型。我尝试仅构建一个,并使用feed_dict:填充数据:一切正常。
自从我通常只使用一种模型。我的输入始终是place_holders,而我只输入培训或验证数据。
最近,我注意到在使用tf.layers.dropout和的模型上有一些奇怪的行为tf.layers.batch_normalization。这两个函数都有一个我与tf.bool占位符一起使用的“训练”参数。我已经看到tf.layers通常与一起使用tf.estimator.Estimator,但是我没有使用它。我已经阅读了Estimators代码,它似乎为培训和验证创建了两个不同的图形。这些问题可能是由于没有两个单独的模型而引起的,但我仍然持怀疑态度。
是否有明确的原因我没有看到这意味着必须使用两个单独的等效模型?
python machine-learning cross-validation tensorflow tensorflow-estimator
我最近开始使用C ++的PortAudio库。为了编译最简单的示例,我必须将项目链接到8个不同的库。我正在使用Code :: blocks作为IDE。我想创建一个新项目,并告诉链接器链接到相同的8个库,因此我不必为每个新项目手动输入它们。能做到吗?
python ×3
tensorflow ×3
audio ×1
c++ ×1
empty-list ×1
import ×1
libraries ×1
linker ×1
numpy ×1
optimization ×1
portaudio ×1
project ×1
runtime ×1