Tensorflow 训练虹膜花数据集分类器时得到TypeError

Tensorflow 训练虹膜花数据集分类器时得到TypeError,tensorflow,Tensorflow,我尝试将输出层作为一个线性层进行实验,对虹膜花数据集进行分类,并使用目标值进行回归 范围为0、1和2。 我使用1个隐藏的tanh激活层和另一个线性层。由于我是tensorflow的新手,所以我尝试使用这种方法来代替标签的热编码,因为我想比较代码的“model”函数的分数 import numpy as np from sklearn.model_selection import train_test_split from sklearn.datasets import load_iris imp

我尝试将输出层作为一个线性层进行实验,对虹膜花数据集进行分类,并使用目标值进行回归 范围为0、1和2。 我使用1个隐藏的tanh激活层和另一个线性层。由于我是tensorflow的新手,所以我尝试使用这种方法来代替标签的热编码,因为我想比较代码的“model”函数的分数

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
import tensorflow as tf
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
data=load_iris()
X=data['data']
Y=data['target']
pca=PCA(n_components=2)
X=pca.fit_transform(X)
#visualise the data
#plt.figure(figsize=(12,12))
#plt.scatter(X[:,0],X[:,1],c=Y,alpha=0.4)
#plt.show()
labels=Y.reshape(-1,1)
x_train,x_test,y_train,y_test=train_test_split(X,Y,test_size=0.3,random_state=42)
y_train=y_train.reshape(-1,1)
y_test=y_test.reshape(-1,1)
hidden_nodes=5
batch_size=100
num_features=2
lr=0.01
g=tf.Graph()
with g.as_default():
    tf_train_dataset=tf.placeholder(tf.float32,shape=[None,num_features])         
    tf_train_labels=tf.placeholder(tf.float32,shape=[None,1]) 
    tf_test_dataset=tf.constant(x_test,dtype=tf.float32)                       
    layer1_weights=tf.Variable(tf.truncated_normal([num_features,hidden_nodes]),dtype=tf.float32)
    layer1_biases=tf.Variable(tf.zeros([hidden_nodes]),dtype=tf.float32)            
    layer2_weights=tf.Variable(tf.truncated_normal([hidden_nodes,1]),dtype=tf.float32)
    layer2_biases=tf.Variable(tf.zeros([1]),dtype=tf.float32)   
    def model(data):                                                               
        Z1=tf.matmul(data,layer1_weights)+layer1_biases                    
        A1=tf.nn.relu(Z1)    
        Z2=tf.matmul(A1,layer2_weights)+layer2_biases                 
        return Z2
    model_scores=model(tf_train_dataset)
    loss=tf.reduce_mean(tf.losses.mean_squared_error(model_scores,tf_train_labels))           
    optimizer=tf.train.GradientDescentOptimizer(lr).minimize(loss)                    
    #train_prediction=model_scores                                                             
    test_prediction=(tf_test_dataset)                                                    
    num_steps=10001                                                                           
    with tf.Session() as sess:                                                                
         init=tf.global_variables_initializer() 
         sess.run(init)                                                  
         for step in range(num_steps):  
             offset=(step*batch_size)%(y_train.shape[0]-batch_size)                            
             minibatch_data=x_train[offset:(offset+batch_size),:]                              
             minibatch_labels=y_train[offset:(offset+batch_size)]                              
             feed_dict={tf_train_dataset:minibatch_data,tf_train_labels:minibatch_labels}      
             ll,loss,scores=sess.run([optimizer,loss,model_scores],feed_dict=feed_dict)
             if step%1000==0:                                                                  
                 print('Minibatch loss at step {}:{}'.format(step,loss))  
我在网上遇到了一个错误

ll,loss,scores=sess.run([optimizer,loss,model_scores],feed_dict=feed_dict)
TypeError:获取参数14.686994的类型无效,必须是字符串或张量。无法将float32转换为张量或运算

为什么会出现错误,是因为这条线吗

模型分数=模型训练数据集

我应该如何着手解决这个问题,模型函数的返回值不能是张量,也不能转换成张量


谢谢。

这是因为这一行:

ll,loss,scores=sess。运行[优化器,loss,model_scores],feed_dict=feed_dict 用sess.run返回的损耗值替换损耗张量。只需使用不同的变量来存储损失值。

@dodo,在调用sess.run之前和之后打印损失变量的类型,谈论原始代码。它的前后是张量。