小编Jul*_*lep的帖子

每次迭代后,处理时间越来越长(TensorFlow)

我正在使用TensorFlow培训CNN用于医学图像应用.

由于我没有大量数据,因此我试图在训练循环期间对我的训练批次应用随机修改,以人为地增加我的训练数据集.我在不同的脚本中创建了以下函数,并在我的训练批处理中调用它:

def randomly_modify_training_batch(images_train_batch, batch_size):

    for i in range(batch_size):
        image = images_train_batch[i]
        image_tensor = tf.convert_to_tensor(image)

        distorted_image = tf.image.random_flip_left_right(image_tensor)
        distorted_image = tf.image.random_flip_up_down(distorted_image)
        distorted_image = tf.image.random_brightness(distorted_image, max_delta=60)
        distorted_image = tf.image.random_contrast(distorted_image, lower=0.2, upper=1.8)

        with tf.Session():
            images_train_batch[i] = distorted_image.eval()  # .eval() is used to reconvert the image from Tensor type to ndarray

return images_train_batch
Run Code Online (Sandbox Code Playgroud)

该代码适用于对我的图像应用修改.

问题是 :

在我的训练循环(feedfoward + backpropagation)的每次迭代之后,将相同的功能应用于我的下一个训练批次比上一次稳定地花费5秒.

处理过程大约需要1秒钟,经过10多次迭代后,处理时间超过一分钟.

是什么导致这种放缓?我该怎样预防呢?

(我怀疑有些东西,distorted_image.eval()但我不太确定.我每次都打开一个新的会话?TensorFlow不应该自动关闭会话,因为我在"with tf.Session()"块中使用?)

python optimization tensorflow

10
推荐指数
1
解决办法
1893
查看次数

具有增量日志记录的同一图上的多行 - wandb

我正在使用权重和偏差(wandb)。我想在使用增量日志记录时将多个图分组为一个图,有什么方法可以做到这一点吗?

假设我们有 10 个指标,我可以将它们增量添加到项目中,逐步构建 10 个图表:

import wandb
import math

N_STEPS = 100

wandb.init(project="someProject", name="testMultipleLines")
for epoch in range(N_STEPS):
    log = {}
    log['main_metric'] = epoch / N_STEPS  # some main metric

    # some other metrics I want to have all on 1 plot
    other_metrics = {}
    for j in range(10):
        other_metrics[f'metric_{j}'] = math.sin(j * math.pi * (epoch / N_STEPS))
    log['other_metrics'] = other_metrics

    wandb.log(log)
Run Code Online (Sandbox Code Playgroud)

默认情况下,它在 wandb 界面上显示为 11 个不同的图。如何通过 API(不使用 Web 界面)对它们进行分组,以便main_metric在一个图形上将它们全部other_metrics集中在第二个图形上?

python plot machine-learning wandb

7
推荐指数
1
解决办法
1716
查看次数

奇怪的迭代结果"错误是南"和运行警告使用t-SNE

我正在使用t-SNE python实现来降低维度,X其中包含100个实例,每个实例由cnn可视化的1024个参数描述.

X.shape = [100,1024]

X.dtype = float32

当我跑:

Y = tsne.tsne(X)
Run Code Online (Sandbox Code Playgroud)

在第23行的tsne.py中弹出第一个警告:

RuntimeWarning:在log H = Math.log(sumP)+ beta*Math.sum(D*P)/ sumP中遇到的除以零

然后在以下几行中会出现更多类似警告的警告:

RuntimeWarning:在divide中遇到无效值

最后,我在处理过程中的每次迭代后得到这个结果:

迭代xyz:错误是nan

代码以"错误"结束,最后得到一个空的散点图.

编辑:

- >我用不同的数据集尝试过它,它运行得很好.但是我也需要它来处理我的第一组(似乎导致问题的那个)

题 :

有谁知道这可能导致什么?有解决方法吗?

nan python-2.7 dimensionality-reduction

6
推荐指数
1
解决办法
969
查看次数

使用tf.image.random:'numpy.ndarray'对象的Tensorflow错误没有属性'get_shape'

介绍

我正在使用Tensorflow教程"Deep MNIST for experts"的修改版本,使用Python API进行使用卷积网络的医学图像分类项目.

我想通过对训练集的图像进行随机修改来人为地增加训练集的大小.

问题

当我运行这条线时:

flipped_images = tf.image.random_flip_left_right(images)
Run Code Online (Sandbox Code Playgroud)

我得到了以下错误:

AttributeError:'numpy.ndarray'对象没有属性'get_shape'

我的Tensor"图像"是(shape=[batch, im_size, im_size, channels])"批量"ndarray的ndarray (shape=[im_size, im_size, channels]).

只是为了检查我的输入数据是否以正确的形状和类型打包,我试图在(未修改的)教程"Tensorflow Mechanics 101"中应用这个简单的函数,我得到了同样的错误.

最后,我仍然在尝试使用以下函数时遇到同样的错误:

  • tf.image.random_flip_up_down()
  • tf.image.random_brightness()
  • tf.image.random_contrast()

问题

由于输入数据通常在Tensorflow中作为ndarrays传输,我想知道:

  1. 它是Tensorflow Python API的错误还是因为输入数据的类型/形状而导致的"错误"?
  2. 我怎么能让它工作并能够申请 tf.image.random_flip_left_right我的训练集?

python-2.7 tensorflow

3
推荐指数
1
解决办法
1万
查看次数

Matplotlib从一个全为1的数组中生成黑色图像

介绍

我正在与做一些测试matplotlib.pyplot。当我尝试保存人造图像时,我陷入了一种奇怪的行为。这是我创建的用于保存图像的非常简单的功能:

import numpy as np
import matplotlib
import matplotlib.pyplot as plt

def save_image(array, name):

    array = array*255.
    fig = plt.figure()
    plt.imsave(name, array.astype('uint8'), cmap=matplotlib.cm.gray)
    plt.close(fig)

return 0
Run Code Online (Sandbox Code Playgroud)

问题

当我尝试创建一个由零组成的数组的图像时,得到的图像很暗,如预期的那样:

zeros_array = np.zeros((200,200), dtype='float')
save_image(zeros_array, 'Dark.jpg')
Run Code Online (Sandbox Code Playgroud)

Dark.jpg

但是,当我尝试创建一个包含一个全为1的数组的图像时,仍然会得到深色图像:

ones_array = np.ones((200,200), dtype='float')
save_image(ones_array, 'White.jpg')
Run Code Online (Sandbox Code Playgroud)

White.jpg

有趣的是,当我创建一个mixed_array具有不同强度正方形的时,充满了这些区域的区域现在显示为白色:

mixed_array = np.ones((200,200), dtype='float')
mixed_array[:100,:100] = 0.25
mixed_array[100:,100:] = 0.75
save_image(mixed_array, 'Mixed.jpg')
Run Code Online (Sandbox Code Playgroud)

Mixed.jpg

题 :

有谁知道为什么matplotlib拒绝保存完整的白色图像,但是图像中的白色区域没有问题?

我可能缺少一些非常明显或基本的内容,但我看不到。

python image-processing matplotlib

2
推荐指数
1
解决办法
2513
查看次数

如何明确管道返回的参数| 在后续命令中使用它们

我有一个看起来像这样的目录树:

dir1
  |---dir2-1
  |---dir2-2
  |---dir2-3
  |--- ...
Run Code Online (Sandbox Code Playgroud)

我只想dir3-1在每个当前的叶子下创建一个新目录dir2-X,结果是:

dir1
  |---dir2-1
        |---dir3-1
  |---dir2-2
        |---dir3-1
  |---dir2-3
        |---dir3-1
  |--- ...
Run Code Online (Sandbox Code Playgroud)

我可以用管道做到这一点|吗?我天真地试图通过 using$1来明确显示管道返回的参数,然后将它们与它们一起使用,mkdir但这似乎不是正确的语法。

我想做的精神是:find . -name dir2-* | xargs -n1 mkdir $1/dir3-1

linux bash

0
推荐指数
1
解决办法
36
查看次数