我想运行一个由3个输入“神经元”(具有三个特征:身高,体重,体脂肪)和2个输出“神经元”的简单神经网络,通过softmax逻辑回归将新数据分类为男性或女性)。我编写这些数据只是为了练习模型的数据输入。就像在tensorflow网站上的MNIST教程一样,但更加简单和有形(而不是784输入功能 - 所有给定MNIST图像的像素 - 我只有3个,而不是几个批次来训练我们的模型我只是想在相同的数据中多次训练。)
我知道这可以通过更简单的算法来完成,比如k-means聚类。但我只想学习如何在数据很小时输入数据。
我明白了:
InvalidArgumentError:您必须为占位符张量提供值lue 'placeholder'与dtype float
我不知道为什么...因为我已经将列表值转换为np.float32(与tf.float32相同)并在定义函数之前检查它。然而,我仍然遇到这个恼人的错误。无论我改变什么,在加载到第一个掌上电脑时,我总是会收到此错误:X。
这是我的代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
import tensorflow as tf
import time
#TRAINING DATA
#3 VIs en columna
#est, pes, %gb_fat
persones = np.asarray([[175,70,2], #H
[155,45,15], #F
[190,85,8], #H
[185,90,7], #H
[169,60,3], #H
[150,40,13], #F
[173,69,12]], dtype = np.float32) #H
# H , D --> one-hot!!
etiquetes = np.asarray([[1,0],
[0,1],
[1,0],
[1,0],
[1,0],
[0,1],
[1,0]], dtype = np.float32)
#TESTING DATA
persones_evaluacio = np.asarray([[190,89,4], #H
[155,52,16], #D
[171,55,18]], dtype = np.float32) #D
etiquetes_evaluacio = np.asarray([[1,0],
[0,1],
[0,1]], dtype = np.float32)
#WE TEST THE DATATYPES
print("dades dels nombres: ",type(persones[0][0]))
print("tipus estructura de dades de la matriu: ", type(persones))
time.sleep(3)
print("files de la matriu:")
time.sleep(0.5)
for i in range(len(persones)):
print(persones[i])
time.sleep(0.5)
def classifica_H_D(nombre_VIs, categories_VD):
#placeholders
x = tf.placeholder(tf.float32, [None,nombre_VIs])
y_reals = tf.placeholder(tf.float32, [None,categories_VD])
#variables
w = tf.Variable(tf.zeros([nombre_VIs, categories_VD], dtype = tf.float32))
b = tf.Variable(tf.zeros([categories_VD], dtype = tf.float32))
#DEFINE MODEL
y_predits = tf.nn.softmax(tf.matmul(x,w) + b)
# define LOSS FUNCTION
cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_reals, logits=y_predits))
#define optimizer to get cross_entropy minimized
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(cross_entropy)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print("finsaqui")
time.sleep(2)
for i in range(1000): #iterate over same data.
sess.run(train_step, feed_dict = {x : persones, y_reals : etiquetes})
if i%50:
print(w.eval(), sess.run(cross_entropy))
prediccio_correcta = tf.equal(tf.argmax(y_predit,1), tf.argmax(y_correctes,1))
accuracy = tf.reduce_mean(tf.cast(prediccio_correcta, tf.float32))
return "\naccuracy: {:.2f}".format(sess.run(accuracy, feed_dict={x: persones_evaluacio, y_reals: etiquetes_evaluacio}))
print(classifica_H_D(3,2))
答案 0 :(得分:2)
问题出在这一行:
print(w.eval(), sess.run(cross_entropy)),
您需要在下面的表单中向其输入输入:
print(w.eval(), sess.run(cross_entropy, feed_dict = {x : persones, y_reals : etiquetes}))
或更好的方法是:
for i in range(1000): #iterate over same data.
_, c_entropy = sess.run([train_step,cross_entropy], feed_dict = {x : persones, y_reals : etiquetes})
if i%50:
print(w.eval(), c_entropy)