我正在学习使用TensorBoard,每次启动tensorboard时,我都会在终端中收到消息:
WARNING:tensorflow:Found more than one graph event per run. Overwriting the graph with the newest event.
Run Code Online (Sandbox Code Playgroud)
我假设是因为我使用相同的名称多次运行相同的模型.我只想多次运行我的模型,并能够使用tensorflow检查它的作用.刚刚重新开始:
tensorboard --logdir=path/to/log-directory
Run Code Online (Sandbox Code Playgroud)
不是通常的做法吗?或者当我想多次运行相同的模型并探索不同的学习算法,步长,启动等时,做这种工作的建议是什么?是否真的有必要每次都设置一个新的日志目录?
machine-learning neural-network conv-neural-network tensorflow tensorboard
我正在部署我的 conv-deconv 网络。我的问题是交叉熵在训练时总是 nan 所以求解器没有更新权重。我检查了我的代码一整天,但我不知道我哪里出错了。以下是我的架构:
这是我的交叉熵函数
ys_reshape = tf.reshape(ys,[-1,1])
prediction = tf.reshape(relu4,[-1,1])
cross_entropy = tf.reduce_mean(-(ys_reshape*tf.log(prediction)))
train_step = tf.train.AdamOptimizer(0.01).minimize(cross_entropy)
Run Code Online (Sandbox Code Playgroud)
其中 ys 的维度为 [1,500,500,1],ys_reshape 为 [250000,1],relu4 为 [1,500,500,1],预测为 [250000,1]。标签矩阵ys的值是{0,1},这是一个两类密集预测。
如果我打印 train_step 它将显示无。谁能帮我?
我目前正在训练一个网络(使用Tensorflow实现的CNN)来分类超过3个类,事情是我最终得分如下:
[ -20145.36, 150069, 578456.3 ].
Run Code Online (Sandbox Code Playgroud)
我希望得分在0到1之间(某种概率).
起初,我想过使用sigmoid函数,但后来我发现这个讨论甚至没有提到:
你建议我做什么,每堂课的得分在0到1之间?
谢谢
classification deep-learning conv-neural-network tensorflow softmax
我想自己在 TensorFlow 中为 MNIST构建一个DCGAN。但是,我正在努力找出应该如何为生成器设置损失函数。在Keras DCGAN 实现中,作者对这个问题使用了一点“解决方法”:他简单地构建了 3 个模型。生成器 (G)、鉴别器 (D) 和第三个,他只是将 G 与 D 结合起来,同时在那里将 D 的训练能力设置为 false。
这样,他就可以用真实图像+生成的图像馈送 D 来训练 D 并训练 G+D 组合模型,因为 D 的损失会传播到 G,因为 D 在 G+D 组合模型中是不可训练的。
在 TensorFlow 中,我已经构建了 G 和 D。训练 D 相对简单,因为我只需要将一批真实的 MNIST 训练图像与生成的图像结合起来并调用训练操作:
session.run(D_train_op,
feed_dict={x: batch_x, y: batch_y})
Run Code Online (Sandbox Code Playgroud)
本例中的训练操作是一个二元交叉熵:
tf.losses.softmax_cross_entropy(y, D_out)
Run Code Online (Sandbox Code Playgroud)
...但是当我没有“堆叠”模型,将“G 和 D”组合到单个第三个模型时,我将如何为 G 设置损失函数?
我知道我必须用 G 生成一批图像,将它们输入 D 然后我可以获得 D 的损失......但是,G 的输出是 shape (batch_size, 28, 28, 1)。我将如何手动设置 G 的损失函数?
如果没有“G 和 D”组合模型“解决方法”,我必须将 …
我正在努力训练一个看起来像这样的U-Net
`class UNet(nn.Module):
def __init__(self, imsize):
super(UNet, self).__init__()
self.imsize = imsize
self.activation = F.relu
self.pool1 = nn.MaxPool2d(2)
self.pool2 = nn.MaxPool2d(2)
self.pool3 = nn.MaxPool2d(2)
self.pool4 = nn.MaxPool2d(2)
self.conv_block1_64 = UNetConvBlock(4, 64)
self.conv_block64_128 = UNetConvBlock(64, 128)
self.conv_block128_256 = UNetConvBlock(128, 256)
self.conv_block256_512 = UNetConvBlock(256, 512)
self.conv_block512_1024 = UNetConvBlock(512, 1024)
self.up_block1024_512 = UNetUpBlock(1024, 512)
self.up_block512_256 = UNetUpBlock(512, 256)
self.up_block256_128 = UNetUpBlock(256, 128)
self.up_block128_64 = UNetUpBlock(128, 64)
self.last = nn.Conv2d(64, 1, 1)`
Run Code Online (Sandbox Code Playgroud)
我正在使用的损失函数是
`class BCELoss2d(nn.Module):
def __init__(self, weight=None, size_average=True):
super(BCELoss2d, self).__init__()
self.bce_loss = nn.BCELoss(weight, size_average) …Run Code Online (Sandbox Code Playgroud) python neural-network deep-learning conv-neural-network pytorch
我尝试将卷积层应用于形状[256,256,3]的图片 a当我直接使用图像的张量时出错
conv1 = conv2d(input,W_conv1) +b_conv1 #<=== error
Run Code Online (Sandbox Code Playgroud)
错误信息:
ValueError: Shape must be rank 4 but is rank 3 for 'Conv2D' (op: 'Conv2D')
with input shapes: [256,256,3], [3,3,3,1].
Run Code Online (Sandbox Code Playgroud)
但是当我重塑函数时,conv2d正常工作
x_image = tf.reshape(input,[-1,256,256,3])
conv1 = conv2d(x_image,W_conv1) +b_conv1
Run Code Online (Sandbox Code Playgroud)
如果我必须重塑张量,在我的情况下重塑的最佳价值是什么?为什么?
import tensorflow as tf
import numpy as np
from PIL import Image
def img_to_tensor(img) :
return tf.convert_to_tensor(img, np.float32)
def weight_generater(shape):
return tf.Variable(tf.truncated_normal(shape,stddev=0.1))
def bias_generater(shape):
return tf.Variable(tf.constant(.1,shape=shape))
def conv2d(x,W):
return tf.nn.conv2d(x,W,[1,1,1,1],'SAME')
def pool_max_2x2(x):
return tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,1,1,1],padding='SAME')
#read image
img = Image.open("img.tif")
sess …Run Code Online (Sandbox Code Playgroud) 我是Tensorflow的新手.我正在尝试在1D卷积层之后添加最大池池:
import tensorflow as tf
import math
sess = tf.InteractiveSession()
length=458
# These will be inputs
## Input pixels, image with one channel (gray)
x = tf.placeholder("float", [None, length])
# Note that -1 is for reshaping
x_im = tf.reshape(x, [-1,length,1])
## Known labels
# None works during variable creation to be
# unspecified size
y_ = tf.placeholder("float", [None,2])
# Conv layer 1
num_filters1 = 2
winx1 = 3
W1 = tf.Variable(tf.truncated_normal(
[winx1, 1 , num_filters1],
stddev=1./math.sqrt(winx1)))
b1 = tf.Variable(tf.constant(0.1,
shape=[num_filters1])) …Run Code Online (Sandbox Code Playgroud) python machine-learning conv-neural-network tensorflow max-pooling
如何解决这个错误?我尝试访问所有论坛以寻找答案来纠正此问题。train_set和test_Set中有5个类。
from keras.models import Sequential
from keras.preprocessing.image import ImageDataGenerator
from keras.layers import Convolution2D, MaxPooling2D, Flatten, Dense
classifier=Sequential()
#1st Convolution Layer
classifier.add(Convolution2D(32, 3, 3, input_shape=(64,64,3),activation="relu"))
#Pooling
classifier.add(MaxPooling2D(pool_size = (2, 2)))
# Adding a second convolutional layer
classifier.add(Convolution2D(32, 3, 3, activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))
# Flattening
classifier.add(Flatten())
classifier.add(Dense(output_dim = 128, activation = 'relu'))
classifier.add(Dense(output_dim = 64, activation = 'relu'))
classifier.add(Dense(output_dim = 1, activation = 'softmax'))
classifier.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy'])
print(classifier.summary())
train_datagen = ImageDataGenerator(rescale = …Run Code Online (Sandbox Code Playgroud) python machine-learning conv-neural-network keras tensorflow
我正在尝试检测图像中单个对象的单个像素位置。我有一个keras CNN回归网络,其图像张量作为输入,而3项向量作为输出。
第一项:是1(如果找到了对象)还是0(没有找到对象)
第二项:是介于0和1之间的数字,指示对象沿x轴的距离
第三项:是介于0和1之间的数字,指示对象沿y轴的距离
我已经在2000个测试图像和500个验证图像上训练了网络,并且val_loss远远小于1,并且val_acc最好在0.94左右。优秀。
但是,当我预测输出时,我发现所有三个输出项的值都不在0和1之间,它们实际上大约在-2和3之间。所有这三个项目应在0到1之间。
我没有在输出层上使用任何非线性激活函数,并且对所有非输出层都使用了relus。即使它是非线性的,我也应该使用softmax吗?第二和第三项预测图像的x和y轴,在我看来,它们是线性量。
这是我的keras网络:
inputs = Input((256, 256, 1))
base_kernels = 64
# 256
conv1 = Conv2D(base_kernels, 3, activation='relu', padding='same', kernel_initializer='he_normal')(inputs)
conv1 = BatchNormalization()(conv1)
conv1 = Conv2D(base_kernels, 3, activation='relu', padding='same', kernel_initializer='he_normal')(conv1)
conv1 = BatchNormalization()(conv1)
conv1 = Dropout(0.2)(conv1)
pool1 = MaxPooling2D(pool_size=(2, 2))(conv1)
# 128
conv2 = Conv2D(base_kernels * 2, 3, activation='relu', padding='same', kernel_initializer='he_normal')(pool1)
conv2 = BatchNormalization()(conv2)
conv2 = Conv2D(base_kernels * 2, 3, activation='relu', padding='same', kernel_initializer='he_normal')(conv2)
conv2 = BatchNormalization()(conv2)
conv2 = Dropout(0.2)(conv2)
pool2 = …Run Code Online (Sandbox Code Playgroud) python machine-learning conv-neural-network keras tensorflow
步幅= 1和1滤波器的一维CNN是否不需要填充就可以使输出长度等于输入长度?
我以为是这种情况,但是创建了具有这些规范的Keras模型,说输入形状为(17910,1)时输出形状为(17902,1)。我想知道为什么尺寸减小了,因为步幅是1,是一维卷积。
model = keras.Sequential([
layers.Conv1D(filters=1,kernel_size=9,strides=1,activation=tf.nn.relu,input_shape=X_train[0].shape)
])
Run Code Online (Sandbox Code Playgroud)
我希望该模型的输出形状应为(17910,1),但很显然,我在此转换中缺少缩小尺寸的来源。层。
tensorflow ×9
python ×7
keras ×3
dcgan ×1
max-pooling ×1
mnist ×1
pytorch ×1
reshape ×1
softmax ×1
tensor ×1
tensorboard ×1