import tensorflow as tf
import os
import sklearn.preprocessing
import pandas as pd
import numpy as np
print(os.getcwd())
os.chdir("C:/Users/jbnu/Documents/양지성/Scholar/정규학기/3-2/데이터마이닝실습/프로젝트/현행/bank-additional/bank-additional")
导入和管理数据集
bank = pd.read_csv("bank4.csv", index_col=False)
tf.reset_default_graph()
keep_prob = tf.placeholder(tf.float32)
learning_rate = 0.003
x_data = bank.ix[:,0:9]; print(x_data)
y_data = bank.ix[:, [-1]]; print(y_data)
x_data = sklearn.preprocessing.scale(x_data).astype(np.float32); print(x_data)
y_data = y_data.astype(np.float32)
使用3层设置占位符和权重。
X = tf.placeholder(tf.float32, [None, 9]); print(X)
Y = tf.placeholder(tf.float32, [None, 1])
# Layer 1
W1 = tf.get_variable("weight1", shape=[9,15], dtype = tf.float32,
initializer=tf.contrib.layers.xavier_initializer())
b1 = tf.get_variable("bias1", shape=[15], dtype = tf.float32,
initializer=tf.contrib.layers.xavier_initializer())
layer1 = tf.nn.relu(tf.matmul(X, W1) + b1)
layer1 = tf.nn.dropout(layer1, keep_prob=keep_prob)
# Layer 2
W2 = tf.get_variable("weight2", shape=[15,15], dtype = tf.float32,
initializer=tf.contrib.layers.xavier_initializer())
b2 = tf.get_variable("bias2", shape=[15], dtype = tf.float32,
initializer=tf.contrib.layers.xavier_initializer())
layer2 = tf.nn.relu(tf.matmul(layer1, W2) + b2)
layer2 = tf.nn.dropout(layer2, keep_prob=keep_prob)
# Layer 3
W3 = tf.get_variable("weight3", shape=[15,15], dtype = tf.float32,
initializer=tf.contrib.layers.xavier_initializer())
b3 = tf.get_variable("bias3", shape=[15], dtype = tf.float32,
initializer=tf.contrib.layers.xavier_initializer())
layer3 = tf.nn.relu(tf.matmul(layer2, W3) + b3)
layer3 = tf.nn.dropout(layer3, keep_prob=keep_prob)
# Output Layer
W4 = tf.get_variable("weight4", shape=[15,1], dtype = tf.float32,
initializer=tf.contrib.layers.xavier_initializer())
b4 = tf.get_variable("bias4", shape=[1], dtype = tf.float32,
initializer=tf.contrib.layers.xavier_initializer())
hypothesis = tf.sigmoid(tf.matmul(layer3, W4) + b4)
hypothesis = tf.nn.dropout(hypothesis, keep_prob=keep_prob)
定义成本函数和优化器。
cost = -tf.reduce_mean(Y * tf.log(hypothesis) + (1 - Y) * tf.log(1 - hypothesis))
train = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
predicted = tf.cast(hypothesis > 0.5, dtype=tf.float32)
accuracy = tf.reduce_mean(tf.cast(tf.equal(predicted, Y), dtype=tf.float32))
培训和准确性测试
# Launch graph
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for step in range(10001):
sess.run(train, feed_dict={X: x_data, Y: y_data})
if step % 1000 == 0:
print("step: ", step, sess.run(cost, feed_dict={X: x_data, Y: y_data}), sep="\n")
# Accuracy report
h, c, a = sess.run([hypothesis, predicted, accuracy],
feed_dict={X: x_data, Y: y_data})
print("\nHypothesis: ", h, "\nCorrect: ", c, "\nAccuracy: ", a)
我不知道为什么我的NN不起作用。
我不断收到消息"您必须为占位符张量和占位符'提供值。与dtype float"虽然它们都是float32。
另外,我的辍学率遇到feed_dict错误。请运行代码并告诉我错误。
答案 0 :(得分:0)
它抱怨辍学keep_prob
占位符:
keep_prob = tf.placeholder(tf.float32)
您应该在feed_dict
以及X
和Y
中提供,或者将其设为tf.placeholder_with_default
,如果您不想将其全部通过时间。