首先是广泛的问题:
我的实际用例是我想用可变张量长度进行一维卷积.为此,我首先需要一个if语句,如果长度大于1,则只执行卷积.然后我有一个for循环,通过卷积的张量.问题是这段代码:
for i in range(tf.shape(tensor)[0]):
Run Code Online (Sandbox Code Playgroud)
不起作用,因为范围运算符需要一个整数.我能以某种方式将其转换为整数吗?
最后,我想用adagrad训练这个模型,无论是自动区分还是已经实现的优化器
编辑:
这是1D卷积,后来将成为我模型中两个层中的第一个.类型错误是每个触发一个版本的for循环的背后
import tensorflow as tf
import numpy as np
def convolve(s, Tl, Tr, b):
if (tf.shape(s)[0] == 1):
return s
sum = 0
# for i in range(tf.shape(s)[0] - 1): # error: TypeError: range() integer end argument expected, got Tensor
# for i in range(s._shape._dims[0]._value - 1): # error: TypeError: unsupported operand type(s) for -: 'NoneType' and 'int'
for i in range(s.get_shape().as_list()[0] - 1): # …Run Code Online (Sandbox Code Playgroud) 我正在尝试获取我的 hidden_layer2 的权重矩阵并打印它。似乎我能够获得权重矩阵,但我无法打印它。
使用时tf.Print(w, [w])不打印任何内容。使用时,print(tf.Print(w,[w])它至少会打印有关张量的信息:
Tensor("hidden_layer2_2/Print:0", shape=(3, 2), dtype=float32)
Run Code Online (Sandbox Code Playgroud)
我也尝试tf.Print()在with -Statement之外使用,结果相同。
完整代码在这里,我只是在前馈神经网络中处理随机数据:https : //pastebin.com/KiQUBqK4
我的代码的一部分:
hidden_layer2 = tf.layers.dense(
inputs=hidden_layer1,
units=2,
activation=tf.nn.relu,
name="hidden_layer2")
with tf.variable_scope("hidden_layer2", reuse=True):
w = tf.get_variable("kernel")
tf.Print(w, [w])
# Also tried tf.Print(hidden_layer2, [w])
Run Code Online (Sandbox Code Playgroud) 我试图在张量流中编写自己的成本函数,但显然我不能"切割"张量对象?
import tensorflow as tf
import numpy as np
# Establish variables
x = tf.placeholder("float", [None, 3])
W = tf.Variable(tf.zeros([3,6]))
b = tf.Variable(tf.zeros([6]))
# Establish model
y = tf.nn.softmax(tf.matmul(x,W) + b)
# Truth
y_ = tf.placeholder("float", [None,6])
def angle(v1, v2):
return np.arccos(np.sum(v1*v2,axis=1))
def normVec(y):
return np.cross(y[:,[0,2,4]],y[:,[1,3,5]])
angle_distance = -tf.reduce_sum(angle(normVec(y_),normVec(y)))
# This is the example code they give for cross entropy
cross_entropy = -tf.reduce_sum(y_*tf.log(y))
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
TypeError: Bad slice index [0, 2, 4] of type <type 'list'>
我正在研究一个 U-net 架构,以在 10 个类中执行分段。我想在每个时代之后计算每个班级的骰子系数。
我的网络的输出是一个形状为每个类的分割掩码堆栈(b_size, rows, cols, num_classes)。通过此输出,我按以下方式计算每个类的骰子系数:
def dice_metric(ground_truth, prediction):
# initialize list with dice scores for each category
dice_score_list = list()
# get list of tensors with shape (rows, cols)
ground_truth_unstacked = reshape_ground_truth(ground_truth)
prediction_unstacked = tf.unstack(prediction, axis=-1)
for (ground_truth_map, prediction_map) in zip(ground_truth_unstacked, prediction_unstacked):
# calculate dice score for every class
dice_i = dice_score(ground_truth_map, prediction_map)
dice_score_list.append(dice_i)
return tf.reduce_mean(dice_score_list, axis=[0])
Run Code Online (Sandbox Code Playgroud)
有什么方法可以打印骰子分数列表而不是平均值。所以在每个时期的输出是:
Epoch 107/200
- 13s - loss: 0.8896 - dice_metric: [dice_class_1, ... dice_class_10] - val_loss: 3.3417 - …Run Code Online (Sandbox Code Playgroud) 我使用Tensorflow编写了一个简单的分类程序,并获得了输出,除了我尝试打印用于模型参数,特征和偏差的张量的形状。功能定义:
import tensorflow as tf, numpy as np
from tensorflow.examples.tutorials.mnist import input_data
def get_weights(n_features, n_labels):
# Return weights
return tf.Variable( tf.truncated_normal((n_features, n_labels)) )
def get_biases(n_labels):
# Return biases
return tf.Variable( tf.zeros(n_labels))
def linear(input, w, b):
# Linear Function (xW + b)
# return np.dot(input,w) + b
return tf.add(tf.matmul(input,w), b)
def mnist_features_labels(n_labels):
"""Gets the first <n> labels from the MNIST dataset
"""
mnist_features = []
mnist_labels = []
mnist = input_data.read_data_sets('dataset/mnist', one_hot=True)
# In order to make quizzes run faster, we're …Run Code Online (Sandbox Code Playgroud) classification machine-learning deep-learning python-3.5 tensorflow
看来在Tensorflow中,至少有三种方法可以打印出张量的值。我到处阅读,但仍然很困惑。
这些作者似乎将不同的用法总结为:
print:只能打印出张量的某些属性,例如它的形状,因为在计算图之外它只是一个操作。tensor.eval(): 不确定它与tf.print()tf.print():可以输出张量的实际值,但必须插入到图中的某个位置并被其他操作使用,否则它将是悬空的并且仍然不会打印。我的困惑可能还在于我不确定我们可以在张量流计算图中访问多少Python功能,或者计算图“结束”和Python代码“开始”在哪里。例如
sess.run()稍后调用时,会调用这一行吗?tensor.eval()和 和有什么区别tf.print()?我应该如何以不同的方式使用它们?我写了这个损失(用于测试keras中的自定义损失):
def loss(y_true, y_pred):
loss = -tf.reduce_sum(y_true * tf.log(y_pred))
loss = tf.Print(loss, [loss], 'loss = ')
return loss
Run Code Online (Sandbox Code Playgroud)
然后:
model.compile(loss=loss,
optimizer=keras.optimizers.Adadelta(),
metrics=['accuracy'])
model.fit(x_train, y_train)
Run Code Online (Sandbox Code Playgroud)
而且没有tf.Print结果:
Epoch 1/12
60000/60000 [==============================] - 12s 198us/step - loss: 25.3197 - acc: 0.9384 - val_loss: 5.6927 - val_acc: 0.9857
Epoch 2/12
60000/60000 [==============================] - 11s 187us/step - loss: 8.7803 - acc: 0.9798 - val_loss: 4.6938 - val_acc: 0.9888
Run Code Online (Sandbox Code Playgroud)
为什么?
我要去Tensorflow的教程.
我想显示的变量的值W和b,它们是重量和偏压分别和占位符x,y通过利用print.
可以显示吗?
print x,y,b,W
Run Code Online (Sandbox Code Playgroud)
我目前看到的如下
Tensor("Placeholder:0", shape=TensorShape([Dimension(None), Dimension(784)]), dtype=float32)
Tensor("Softmax:0", shape=TensorShape([Dimension(None), Dimension(10)]), dtype=float32)
tensorflow.python.ops.variables.Variable object at 0x1006b0b90>
tensorflow.python.ops.variables.Variable object at 0x101b76410>
Run Code Online (Sandbox Code Playgroud)