我建立了一个神经网络,该网络的性能相当好,我想在非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) 我尝试按照 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) 嗨,我正在尝试进入 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) 我正在移植一个 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 函数 …
我注意到tf.nn.softmax_cross_entropy_with_logits要求logits参数的"未缩放的日志概率".但是,在提交给此函数之前,我没有看到任何人建议对其NN预测执行日志操作.我在这里错过了什么吗?
尝试使用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) 我一直在尝试按照 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 …
tensorflow ×6
python ×3
keras ×1
logging ×1
loss ×1
numpy ×1
pytorch ×1
scikit-learn ×1
softmax ×1