相关疑难解决方法(0)

在TensorFlow中保存或导出权重和偏差以进行非Python复制

我建立了一个神经网络,该网络的性能相当好,我想在非Python环境中复制我的模型。我的网络设置如下:

sess = tf.InteractiveSession()
x = tf.placeholder(tf.float32, shape=[None, 23])
y_ = tf.placeholder(tf.float32, shape=[None, 2])
W = tf.Variable(tf.zeros([23,2]))
b = tf.Variable(tf.zeros([2]))
sess.run(tf.initialize_all_variables())
y = tf.nn.softmax(tf.matmul(x,W) + b)
Run Code Online (Sandbox Code Playgroud)

如何获得我的权重和偏见可解译的.csv或.txt?

编辑:以下是我的完整脚本:

import csv
import numpy
import tensorflow as tf

data = list(csv.reader(open("/Users/sjayaram/developer/TestApp/out/production/TestApp/data.csv")))
[[float(j) for j in i] for i in data]
numpy.random.shuffle(data)
results=data

#delete results from data
data = numpy.delete(data, [23, 24], 1)
#delete data from results
results = numpy.delete(results, range(23), 1)

sess = tf.InteractiveSession()
x = tf.placeholder(tf.float32, shape=[None, 23])
y_ = tf.placeholder(tf.float32, …
Run Code Online (Sandbox Code Playgroud)

python machine-learning neural-network tensorflow

5
推荐指数
1
解决办法
6802
查看次数

张量流 log_softmax tf.nn.log(tf.nn.softmax(predict)) tf.nn.softmax_cross_entropy_with_logits

我尝试按照 tensorflow 教程实现 MNIST CNN 神经网络,并找到这些实现 softmax 交叉熵的方法给出了不同的结果:

(1) 不好的结果

softmax = tf.nn.softmax(pred)
cross_entropy_cnn = - y * tf.log(softmax + 1e-10)
cost = tf.reduce_sum(cross_entropy_cnn)
Run Code Online (Sandbox Code Playgroud)

(2) 好成绩

cross_entropy_cnn = -y * tf.nn.log_softmax(pred)
cost = tf.reduce_sum(cross_entropy_cnn) 
Run Code Online (Sandbox Code Playgroud)

(3) 好成绩

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y))
Run Code Online (Sandbox Code Playgroud)

在数学上,这些方法是相同的。我的测试程序如下:

import tutorials.mnist.input_data as input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
import tensorflow as tf
# Parameters
learning_rate = 0.001
training_iters = 20000
batch_size = 100
display_step = 10

# Network Parameters
n_input = 784 # MNIST data input (img shape: 28*28) …
Run Code Online (Sandbox Code Playgroud)

logging tensorflow softmax

5
推荐指数
1
解决办法
3193
查看次数

Tensorflow 和 Scikitlearn log_loss 函数实现的区别

嗨,我正在尝试进入 tensorflow,但感觉有点傻。TF 中的 log_loss 与 sklearn 的不同吗?

这是我的代码中的一些行,我是如何计算的:

from sklearn.metrics import log_loss

tmp = np.array(y_test)
y_test_t = np.array([tmp, -(tmp-1)]).T[0]

tf_log_loss = tf.losses.log_loss(predictions=tf.nn.softmax(logits), labels=tf_y)

with tf.Session() as sess:

    # training

    a = sess.run(tf.nn.softmax(logits), feed_dict={tf_x: xtest, keep_prob: 1.})
    print("    sk.log_loss: ", log_loss(y_test, a,eps=1e-7 ))
    print("    tf.log_loss: ", sess.run(tf_log_loss, feed_dict={tf_x: xtest, tf_y: y_test_t, keep_prob: 1.}))
Run Code Online (Sandbox Code Playgroud)

我得到的输出

Epoch  7, Loss:     0.4875 Validation Accuracy: 0.818981
    sk.log_loss:  1.76533018874
    tf.log_loss:  0.396557
Epoch  8, Loss:     0.4850 Validation Accuracy: 0.820738
    sk.log_loss:  1.77217639627
    tf.log_loss:  0.393351
Epoch  9, Loss:     0.4835 Validation …
Run Code Online (Sandbox Code Playgroud)

machine-learning loss scikit-learn tensorflow

5
推荐指数
1
解决办法
1298
查看次数

Keras 的 CategoricalCrossEntropy 到底在做什么?

我正在移植一个 keras 模型torch,但我无法'categorical_crossentropy'在 softmax 层之后复制 keras/tensorflow 的确切行为。我对这个问题有一些解决方法,所以我只对了解计算分类交叉熵时 tensorflow究竟计算什么感兴趣。

作为一个玩具问题,我设置了标签和预测向量

>>> import tensorflow as tf
>>> from tensorflow.keras import backend as K
>>> import numpy as np


>>> true = np.array([[0.0, 1.0], [1.0, 0.0]])
>>> pred = np.array([[0.0, 1.0], [0.0, 1.0]])
Run Code Online (Sandbox Code Playgroud)

并计算分类交叉熵:

>>> loss = tf.keras.losses.CategoricalCrossentropy()
>>> print(loss(pred, true).eval(session=K.get_session()))
8.05904769897461
Run Code Online (Sandbox Code Playgroud)

这与分析结果不同

>>> loss_analytical = -1*K.sum(true*K.log(pred))/pred.shape[0]
>>> print(loss_analytical.eval(session=K.get_session()))
nan
Run Code Online (Sandbox Code Playgroud)

我深入研究了 keras/tf 的交叉熵的源代码(参见Tensorflow Github Source Code 中的 Softmax Cross Entropy implementation),并在https://github.com/tensorflow/tensorflow/blob/c903b4607821a03c36c17b0befa25306c6/compilerflow/compiler/找到了 c 函数 …

python machine-learning keras tensorflow

5
推荐指数
2
解决办法
1326
查看次数

Tensorflow softmax_cross_entropy_with_logits请求未缩放的日志概率

我注意到tf.nn.softmax_cross_entropy_with_logits要求logits参数的"未缩放的日志概率".但是,在提交给此函数之前,我没有看到任何人建议对其NN预测执行日志操作.我在这里错过了什么吗?

tensorflow

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

RuntimeError:尺寸超出范围(预计在[-1,0]范围内,但得到1)

尝试使用unet模型训练pytorch模型(初学者)Im,我将图像输入作为输入,并随同将标签输入作为输入图像蒙版并在其上转换数据集。我从其他地方获得了unet模型,我将交叉熵损失用作损失函数,但是我得到的尺寸超出了范围误差,

    `RuntimeError                              Traceback (most recent call last)
<ipython-input-358-fa0ef49a43ae> in <module>()
     16 for epoch in range(0, num_epochs):
     17     # train for one epoch
---> 18     curr_loss = train(train_loader, model, criterion, epoch, num_epochs)
     19 
     20     # store best loss and save a model checkpoint

<ipython-input-356-1bd6c6c281fb> in train(train_loader, model, criterion, epoch, num_epochs)
     16         # measure loss
     17         print (outputs.size(),labels.size())
---> 18         loss = criterion(outputs, labels)
     19         losses.update(loss.data[0], images.size(0))
     20 

/usr/local/lib/python3.5/dist-packages/torch/nn/modules/module.py in     _ _call__(self, *input, **kwargs)
    323         for hook in self._forward_pre_hooks.values():
    324             hook(self, input) …
Run Code Online (Sandbox Code Playgroud)

pytorch

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

TensorFlow 在实现逻辑回归时返回 nan

我一直在尝试按照 MNIST 示例在 TensorFlow 中实现逻辑回归,但使用来自 CSV 的数据。每行是一个样本,有 12 个维度。我的代码如下:

batch_size = 5
learning_rate = .001
x = tf.placeholder(tf.float32,[None,12])
y = tf.placeholder(tf.float32,[None,2])
W = tf.Variable(tf.zeros([12,2]))
b = tf.Variable(tf.zeros([2]))
mult = tf.matmul(x,W)
pred = tf.nn.softmax(mult+b)
cost = tf.reduce_mean(-tf.reduce_sum(y*tf.log(pred), reduction_indices=1))
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)

sess = tf.Session()
sess.run(tf.initialize_all_variables())
avg_cost = 0
total_batch = int(len(Xtrain)/batch_size)
for i in range(total_batch):
    batch_xs = Xtrain[i*batch_size:batch_size*i+batch_size]
    batch_ys = ytrain[i*batch_size:batch_size*i+batch_size]
    _, c = sess.run([optimizer, cost], feed_dict={x: batch_xs,y: batch_ys})
    print(c)
Run Code Online (Sandbox Code Playgroud)

Xtrain 是一个 252x10 的 numpy 数组,而 ytrain 是一个 252x2 的单热 numpy …

python numpy logistic-regression tensorflow

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