我正在使用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()"块中使用?)
我正在使用权重和偏差(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
集中在第二个图形上?
我正在使用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
代码以"错误"结束,最后得到一个空的散点图.
编辑:
- >我用不同的数据集尝试过它,它运行得很好.但是我也需要它来处理我的第一组(似乎导致问题的那个)
题 :
有谁知道这可能导致什么?有解决方法吗?
介绍
我正在使用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传输,我想知道:
tf.image.random_flip_left_right
我的训练集?介绍
我正在与做一些测试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)
但是,当我尝试创建一个包含一个全为1的数组的图像时,仍然会得到深色图像:
ones_array = np.ones((200,200), dtype='float')
save_image(ones_array, 'White.jpg')
Run Code Online (Sandbox Code Playgroud)
有趣的是,当我创建一个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)
题 :
有谁知道为什么matplotlib
拒绝保存完整的白色图像,但是图像中的白色区域没有问题?
我可能缺少一些非常明显或基本的内容,但我看不到。
我有一个看起来像这样的目录树:
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
。
python ×3
python-2.7 ×2
tensorflow ×2
bash ×1
linux ×1
matplotlib ×1
nan ×1
optimization ×1
plot ×1
wandb ×1