在培训虹膜花数据集的分类器时获得TypeError



我正在尝试通过将输出层作为线性层进行实验范围为0,1和2。我正在使用1个隐藏的Tanh激活层和另一个线性层。我尝试使用它,而不是使用此标签的一个热编码,因为我想比较代码的"模型"功能的分数,因为我是新手的TensorFlow .on在代码下运行...

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转换为张量或操作。(

为什么要出错,是因为这个行

model_scores = model(tf_train_dataset(

我应该如何解决此问题,并且模型函数的返回值不能被张量或投入到张量。

谢谢。

这是因为这一行:

ll,loss,scores=sess.run([optimizer,loss,model_scores],feed_dict=feed_dict)

您将loss张量替换为sess.run返回的损耗值。只需使用其他变量存储损失值即可。

最新更新